You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mnemonic.apache.org by ga...@apache.org on 2016/04/05 00:20:59 UTC

incubator-mnemonic git commit: add native param conversion as well as test the webhook of Appache mirrored repo in Github

Repository: incubator-mnemonic
Updated Branches:
  refs/heads/native_computing_featured 5918930d6 -> cfc9a73f7


add native param conversion as well as test the webhook of Appache mirrored repo in Github


Project: http://git-wip-us.apache.org/repos/asf/incubator-mnemonic/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-mnemonic/commit/cfc9a73f
Tree: http://git-wip-us.apache.org/repos/asf/incubator-mnemonic/tree/cfc9a73f
Diff: http://git-wip-us.apache.org/repos/asf/incubator-mnemonic/diff/cfc9a73f

Branch: refs/heads/native_computing_featured
Commit: cfc9a73f7773d16ce5a68e8f169c32da8f006ffb
Parents: 5918930
Author: Wang, Gang(Gary) <ga...@intel.com>
Authored: Fri Apr 1 21:47:12 2016 -0700
Committer: Wang, Gang(Gary) <ga...@intel.com>
Committed: Fri Apr 1 21:47:12 2016 -0700

----------------------------------------------------------------------
 .../main/java/com/intel/bigdatamem/Utils.java   | 79 ++++++++++++++++++++
 1 file changed, 79 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-mnemonic/blob/cfc9a73f/core/src/main/java/com/intel/bigdatamem/Utils.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/com/intel/bigdatamem/Utils.java b/core/src/main/java/com/intel/bigdatamem/Utils.java
index cc7bbf0..14a895a 100644
--- a/core/src/main/java/com/intel/bigdatamem/Utils.java
+++ b/core/src/main/java/com/intel/bigdatamem/Utils.java
@@ -302,4 +302,83 @@ public class Utils {
         return "{" + String.join(",", slist) + "}";
     }
 
+    /**
+     * retrieve a set of native field info from a list of object field info according to the field
+     * id info. it forms a value info stack for native code to use as one standardized parameter
+     *
+     * @param objstack
+     *           a stack of object info retrieved from Durable.getNativeFieldInfo(), order matters
+     *
+     * @param fidinfostack
+     *           a stack of field id in the form of (next_fid, next_level_fid) order follows objstack
+     *           the last next_level_fid specifies the value's fid.
+     *           the last item of next_fid could be null if there is no next node
+     *           if it is null that means the last item is a object instead of node
+     *
+     * @return   the stack of native field info
+     *
+     */
+    public static List<long[]> getNativeParamForm(List<long[][]> objstack, long[][] fidinfostack) {
+        List<long[]> ret = new ArrayList<long[]>();
+        if (null == objstack ||
+            null == fidinfostack ||
+            fidinfostack.length != objstack.size()) {
+            throw new IllegalArgumentException("Not the same depth");
+        }
+        for (int idx = 0; idx < fidinfostack.length; ++idx) {
+            ret.add(genNativeStackItem(objstack.get(idx), fidinfostack[idx],
+                    idx == fidinfostack.length - 1));
+        }
+        return ret;
+    }
+
+    /**
+     * generate an item of native stack.
+     *
+     * @param oinfo
+     *           a object field info
+     *
+     * @param fidinfo
+     *           a pair of field id info
+     *
+     * @param allowfidnull
+     *           allow the first field id is null
+     *
+     * @return the native item
+     */
+    public static long[] genNativeStackItem(long[][] oinfo, long[] fidinfo, boolean allowfidnull) {
+        long[] ret = new long[4];
+        long fid;
+        boolean found;
+        if (fidinfo.length != 2) {
+            throw new IllegalArgumentException("the length of field id array is not exactly 2");
+        }
+        for (int idx = 0; idx < fidinfo.length; ++idx) {
+            ret[idx*2] = 0;
+            ret[idx*2 + 1] = 0;
+            fid = fidinfo[idx];
+            if (fid <= 0) {
+                if (allowfidnull && 0 == idx) {
+                    continue;
+                } else {
+                    throw new IllegalArgumentException("the field id is not greater than 0");
+                }
+            }
+            found = false;
+            for (long[] finfo : oinfo) {
+                if (finfo.length != 3) {
+                    throw new IllegalArgumentException("the length of field array is not exactly 3");
+                }
+                if (fid == finfo[0]) {
+                    ret[idx*2] = finfo[1];
+                    ret[idx*2 + 1] = finfo[2];
+                    found = true;
+                }
+            }
+            if (!found) {
+                throw new IllegalArgumentException("field id not found");
+            }
+        }
+        return ret;
+    }
 }