java_gen: make OFFactory be a XidGenerator
diff --git a/java_gen/pre-written/src/main/java/org/projectfloodlight/openflow/protocol/XidGenerator.java b/java_gen/pre-written/src/main/java/org/projectfloodlight/openflow/protocol/XidGenerator.java
index 65976dc..2ee2764 100644
--- a/java_gen/pre-written/src/main/java/org/projectfloodlight/openflow/protocol/XidGenerator.java
+++ b/java_gen/pre-written/src/main/java/org/projectfloodlight/openflow/protocol/XidGenerator.java
@@ -1,5 +1,5 @@
package org.projectfloodlight.openflow.protocol;
public interface XidGenerator {
- int nextXid();
+ long nextXid();
}
diff --git a/java_gen/pre-written/src/main/java/org/projectfloodlight/openflow/protocol/XidGenerators.java b/java_gen/pre-written/src/main/java/org/projectfloodlight/openflow/protocol/XidGenerators.java
new file mode 100644
index 0000000..4609afa
--- /dev/null
+++ b/java_gen/pre-written/src/main/java/org/projectfloodlight/openflow/protocol/XidGenerators.java
@@ -0,0 +1,38 @@
+package org.projectfloodlight.openflow.protocol;
+
+import java.util.concurrent.atomic.AtomicLong;
+
+public class XidGenerators {
+ private static final XidGenerator GLOBAL_XID_GENERATOR = new StandardXidGenerator();
+
+ public static XidGenerator create() {
+ return new StandardXidGenerator();
+ }
+
+ public static XidGenerator global() {
+ return GLOBAL_XID_GENERATOR;
+ }
+}
+
+class StandardXidGenerator implements XidGenerator {
+
+ private final AtomicLong xidGen = new AtomicLong();
+ long MAX_XID = 0xFFffFFffL;
+
+ @Override
+ public long nextXid() {
+ long xid;
+ do {
+ xid = xidGen.incrementAndGet();
+ if(xid > MAX_XID) {
+ synchronized(this) {
+ if(xidGen.get() > MAX_XID) {
+ xidGen.set(0);
+ }
+ }
+ }
+ } while(xid > MAX_XID);
+ return xid;
+ }
+
+}
\ No newline at end of file