blob: 4609afa1632d090e268b23df926acd957f74d51d [file] [log] [blame]
tom0eb04ca2014-08-25 14:34:51 -07001package org.projectfloodlight.openflow.protocol;
2
3import java.util.concurrent.atomic.AtomicLong;
4
5public class XidGenerators {
6 private static final XidGenerator GLOBAL_XID_GENERATOR = new StandardXidGenerator();
7
8 public static XidGenerator create() {
9 return new StandardXidGenerator();
10 }
11
12 public static XidGenerator global() {
13 return GLOBAL_XID_GENERATOR;
14 }
15}
16
17class StandardXidGenerator implements XidGenerator {
18
19 private final AtomicLong xidGen = new AtomicLong();
20 long MAX_XID = 0xFFffFFffL;
21
22 @Override
23 public long nextXid() {
24 long xid;
25 do {
26 xid = xidGen.incrementAndGet();
27 if(xid > MAX_XID) {
28 synchronized(this) {
29 if(xidGen.get() > MAX_XID) {
30 xidGen.set(0);
31 }
32 }
33 }
34 } while(xid > MAX_XID);
35 return xid;
36 }
37
38}