]> rtime.felk.cvut.cz Git - orte.git/blobdiff - orte/java/src/org/ocera/orte/types/RecvInfo.java
Merge branch 'master' of https://github.com/Vajnar/orte
[orte.git] / orte / java / src / org / ocera / orte / types / RecvInfo.java
index 2baddba6d64ccc23b88dde5d6c96f1bedece8fe0..07db2074520e05c02e5ecc5be76c3d97c3ef1e19 100644 (file)
@@ -50,15 +50,17 @@ public class RecvInfo
    *     [15]  offsetof(SequenceNumber,high),
    *     [16]  offsetof(SequenceNumber,low)
    */
-  private ByteBuffer      helper_buffer;
+  static ByteBuffer      helper_buffer;
+
+  static {
+    helper_buffer = ByteBuffer.allocateDirect(17*Integer.SIZE/8);
+    helper_buffer.order(ByteOrder.nativeOrder());
+    c_helper(helper_buffer);
+  }
 
   public RecvInfo()
   {
        //System.out.println(":j: instance of RecvInfo created..");
-    this.helper_buffer = ByteBuffer.allocateDirect(17*Integer.SIZE/8);
-    this.helper_buffer.order(ByteOrder.nativeOrder());
-    this.c_helper(helper_buffer);
-
     this.info_buffer = ByteBuffer.allocateDirect(helper_buffer.getInt(0));
     this.info_buffer.order(ByteOrder.nativeOrder());
   }
@@ -91,50 +93,12 @@ public class RecvInfo
 
   public String getTopic()
   {
-    long topic_pointer;
-    
-    switch(helper_buffer.getInt(Integer.SIZE*2/8)) {
-      case 4:
-        topic_pointer = info_buffer.getInt(helper_buffer.getInt(Integer.SIZE*4/8));
-        break;
-      case 8:
-        topic_pointer = info_buffer.getLong(helper_buffer.getInt(Integer.SIZE*4/8));
-        break;
-      case 1:
-        topic_pointer = info_buffer.get(helper_buffer.getInt(Integer.SIZE*4/8));
-        break;
-      case 2:
-        topic_pointer = info_buffer.getShort(helper_buffer.getInt(Integer.SIZE*4/8));
-        break;
-      default:
-        return null;
-    }
-    
-    return get_string(topic_pointer);
+    return getString(Integer.SIZE*4/8);
   }
 
   public String getTypeName()
   {
-    long type_pointer;
-    
-    switch(helper_buffer.getInt(Integer.SIZE*2/8)) {
-      case 4:
-        type_pointer = info_buffer.getInt(helper_buffer.getInt(Integer.SIZE*5/8));
-        break;
-      case 8:
-        type_pointer = info_buffer.getLong(helper_buffer.getInt(Integer.SIZE*5/8));
-        break;
-      case 1:
-        type_pointer = info_buffer.get(helper_buffer.getInt(Integer.SIZE*5/8));
-        break;
-      case 2:
-        type_pointer = info_buffer.getShort(helper_buffer.getInt(Integer.SIZE*5/8));
-        break;
-      default:
-        return null;
-    }
-    
-    return get_string(type_pointer);
+    return getString(Integer.SIZE*5/8);
   }
 
   public GUID_RTPS getSenderGuid()
@@ -188,10 +152,31 @@ public class RecvInfo
   {
     return this.info_buffer;
   }
-  
+
+  private String getString(int offset) {
+    long string_pointer = -1;
+    
+    switch(helper_buffer.getInt(Integer.SIZE*2/8)) {
+      case 4:
+        string_pointer = info_buffer.getInt(helper_buffer.getInt(offset));
+        break;
+      case 8:
+        string_pointer = info_buffer.getLong(helper_buffer.getInt(offset));
+        break;
+      case 1:
+        string_pointer = info_buffer.get(helper_buffer.getInt(offset));
+        break;
+      case 2:
+        string_pointer = info_buffer.getShort(helper_buffer.getInt(offset));
+        break;
+    }
+    
+    return get_string(string_pointer);
+  }
+
   /* NATIVE FUNCTIONS */
   
-  private native String get_string(long string_pointer);
-  private native void c_helper(ByteBuffer buffer);
+  static native String get_string(long string_pointer);
+  static native void c_helper(ByteBuffer buffer);
   
 }