From: rtrimana Date: Thu, 1 Dec 2016 21:40:47 +0000 (-0800) Subject: Testing struct (single object); fixing small bugs, etc. X-Git-Url: http://plrg.eecs.uci.edu/git/?p=iot2.git;a=commitdiff_plain;h=43511149805bfc92d9332532445d5e0040d613bd Testing struct (single object); fixing small bugs, etc. --- diff --git a/config/iotpolicy/testclasspolicy.pol b/config/iotpolicy/testclasspolicy.pol index ddd86d8..3c03d53 100644 --- a/config/iotpolicy/testclasspolicy.pol +++ b/config/iotpolicy/testclasspolicy.pol @@ -28,6 +28,8 @@ public interface TestClassInterface { public Enum[] handleEnumArray(Enum en[]); public List handleEnumList(List en); + public Struct handleStruct(Struct str); + public int getA(); public void setA(int _int); public void setB(float _float); @@ -63,6 +65,9 @@ public interface TestClassInterface { method = "handleEnum(Enum en)"; method = "handleEnumArray(Enum en[])"; method = "handleEnumList(List en)"; + + method = "handleStruct(Struct str)"; + method = "getA()"; method = "setA(int _int)"; method = "setB(float _float)"; diff --git a/iotjava/iotpolicy/IoTCompiler.java b/iotjava/iotpolicy/IoTCompiler.java index c28aeea..6555f9d 100644 --- a/iotjava/iotpolicy/IoTCompiler.java +++ b/iotjava/iotpolicy/IoTCompiler.java @@ -1232,12 +1232,14 @@ public class IoTCompiler { String simpleType = getSimpleType(paramType); if (isStructClass(simpleType)) { int methodNumId = intDecl.getMethodNumId(method); + String helperMethod = methodNumId + "struct" + i; + int methodHelperNumId = intDecl.getHelperMethodNumId(helperMethod); // Iterate over interfaces to give permissions to Map> mapNewIntMethods = mapInt2NewInts.get(intface); for (Map.Entry> intMeth : mapNewIntMethods.entrySet()) { String newIntface = intMeth.getKey(); int newObjectId = getNewIntfaceObjectId(newIntface); - println("set" + newObjectId + "Allowed.add(" + methodNumId + ");"); + println("set" + newObjectId + "Allowed.add(" + methodHelperNumId + ");"); } } } @@ -2166,7 +2168,6 @@ public class IoTCompiler { println("public " + newSkelClass + "(" + intface + " _mainObj, int _objectId) throws Exception {"); println("mainObj = _mainObj;"); println("objectId = _objectId;"); - writeStructPermissionJavaSkeleton(methods, intDecl, intface); println("}\n"); } @@ -2442,6 +2443,7 @@ public class IoTCompiler { // Write file headers println("#ifndef _" + stType.toUpperCase() + "_HPP__"); println("#define _" + stType.toUpperCase() + "_HPP__"); + println("using namespace std;"); println("struct " + stType + " {"); List structMemberTypes = structDecl.getMemberTypes(stType); List structMembers = structDecl.getMembers(stType); @@ -2801,9 +2803,8 @@ public class IoTCompiler { } if (isArrayOrList(param, paramType)) { // An array or list for (int i = 0; i < members.size(); i++) { - String prmTypeC = checkAndGetCplusType(memTypes.get(i)); - String prmType = checkAndGetCplusArrayType(prmTypeC, members.get(i)); - println("paramCls[pos] = \"" + getSimpleType(getEnumType(prmType)) + "\";"); + String prmTypeC = checkAndGetCplusArgClsType(memTypes.get(i), members.get(i)); + println("paramCls[pos] = \"" + prmTypeC + "\";"); print("paramObj[pos++] = &" + param + "[i]."); print(getSimpleIdentifier(members.get(i))); println(";"); @@ -2811,9 +2812,8 @@ public class IoTCompiler { println("}"); } else { // Just one struct element for (int i = 0; i < members.size(); i++) { - String prmTypeC = checkAndGetCplusType(memTypes.get(i)); - String prmType = checkAndGetCplusArrayType(prmTypeC, members.get(i)); - println("paramCls[pos] = \"" + getSimpleType(getEnumType(prmType)) + "\";"); + String prmTypeC = checkAndGetCplusArgClsType(memTypes.get(i), members.get(i)); + println("paramCls[pos] = \"" + prmTypeC + "\";"); print("paramObj[pos++] = &" + param + "."); print(getSimpleIdentifier(members.get(i))); println(";"); @@ -2841,9 +2841,8 @@ public class IoTCompiler { if (isStructClass(simpleType)) { writeStructMembersCplusStub(simpleType, paramType, param); } else { - String prmTypeC = checkAndGetCplusType(methPrmTypes.get(i)); - String prmType = checkAndGetCplusArrayType(prmTypeC, methParams.get(i)); - println("paramCls[pos] = \"" + getSimpleType(getEnumType(prmType)) + "\";"); + String prmTypeC = checkAndGetCplusArgClsType(methPrmTypes.get(i), methParams.get(i)); + println("paramCls[pos] = \"" + prmTypeC + "\";"); print("paramObj[pos++] = &"); print(getEnumParam(methPrmTypes.get(i), getSimpleIdentifier(methParams.get(i)), i)); println(";"); @@ -2919,17 +2918,15 @@ public class IoTCompiler { if (isArrayOrList(retType, retType)) { // An array or list println("for(int i = 0; i < retLen; i++) {"); for (int i = 0; i < members.size(); i++) { - String prmTypeC = checkAndGetCplusType(memTypes.get(i)); - String prmType = checkAndGetCplusArrayType(prmTypeC, members.get(i)); - println("retCls[retPos] = \"" + getSimpleType(getEnumType(prmType)) + "\";"); + String prmTypeC = checkAndGetCplusArgClsType(memTypes.get(i), members.get(i)); + println("retCls[retPos] = \"" + prmTypeC + "\";"); println("retObj[retPos++] = &retParam" + i + "[i];"); } println("}"); } else { // Just one struct element for (int i = 0; i < members.size(); i++) { - String prmTypeC = checkAndGetCplusType(memTypes.get(i)); - String prmType = checkAndGetCplusArrayType(prmTypeC, members.get(i)); - println("retCls[retPos] = \"" + getSimpleType(getEnumType(prmType)) + "\";"); + String prmTypeC = checkAndGetCplusArgClsType(memTypes.get(i), members.get(i)); + println("retCls[retPos] = \"" + prmTypeC + "\";"); println("retObj[retPos++] = &retParam" + i + ";"); } } @@ -3409,12 +3406,14 @@ public class IoTCompiler { String simpleType = getSimpleType(paramType); if (isStructClass(simpleType)) { int methodNumId = intDecl.getMethodNumId(method); + String helperMethod = methodNumId + "struct" + i; + int helperMethodNumId = intDecl.getHelperMethodNumId(helperMethod); // Iterate over interfaces to give permissions to Map> mapNewIntMethods = mapInt2NewInts.get(intface); for (Map.Entry> intMeth : mapNewIntMethods.entrySet()) { String newIntface = intMeth.getKey(); int newObjectId = getNewIntfaceObjectId(newIntface); - println("set" + newObjectId + "Allowed.insert(" + methodNumId + ");"); + println("set" + newObjectId + "Allowed.insert(" + helperMethodNumId + ");"); } } } @@ -3636,7 +3635,7 @@ public class IoTCompiler { String pureType = getSimpleArrayType(getGenericType(retType)); // Take the inner type of generic if (getParamCategory(retType) == ParamCategory.NONPRIMITIVES) - pureType = getTypeOfGeneric(retType)[0]; + pureType = getGenericType(retType); if (isEnumClass(pureType)) { // Check if this is enum type // Enum decoder @@ -3818,17 +3817,15 @@ public class IoTCompiler { if (isArrayOrList(param, paramType)) { // An array or list println("for(int i = 0; i < retLen; i++) {"); for (int i = 0; i < members.size(); i++) { - String prmTypeC = checkAndGetCplusType(memTypes.get(i)); - String prmType = checkAndGetCplusArrayType(prmTypeC, members.get(i)); - println("paramCls[pos] = \"" + getSimpleType(getEnumType(prmType)) + "\";"); + String prmTypeC = checkAndGetCplusArgClsType(memTypes.get(i), members.get(i)); + println("paramCls[pos] = \"" + prmTypeC + "\";"); println("paramObj[pos++] = ¶m" + i + "[i];"); } println("}"); } else { // Just one struct element for (int i = 0; i < members.size(); i++) { - String prmTypeC = checkAndGetCplusType(memTypes.get(i)); - String prmType = checkAndGetCplusArrayType(prmTypeC, members.get(i)); - println("paramCls[pos] = \"" + getSimpleType(getEnumType(prmType)) + "\";"); + String prmTypeC = checkAndGetCplusArgClsType(memTypes.get(i), members.get(i)); + println("paramCls[pos] = \"" + prmTypeC + "\";"); println("paramObj[pos++] = ¶m" + i + ";"); } } @@ -3899,9 +3896,8 @@ public class IoTCompiler { if (isArrayOrList(retType, retType)) { // An array or list println("for(int i = 0; i < retLen; i++) {"); for (int i = 0; i < members.size(); i++) { - String paramTypeC = checkAndGetCplusType(memTypes.get(i)); - String prmType = checkAndGetCplusArrayType(paramTypeC, members.get(i)); - println("retCls[retPos] = \"" + getSimpleType(getEnumType(prmType)) + "\";"); + String prmTypeC = checkAndGetCplusArgClsType(memTypes.get(i), members.get(i)); + println("retCls[retPos] = \"" + prmTypeC + "\";"); print("retObj[retPos++] = &retStruct[i]."); print(getEnumParam(memTypes.get(i), getSimpleIdentifier(members.get(i)), i)); println(";"); @@ -3909,9 +3905,8 @@ public class IoTCompiler { println("}"); } else { // Just one struct element for (int i = 0; i < members.size(); i++) { - String paramTypeC = checkAndGetCplusType(memTypes.get(i)); - String prmType = checkAndGetCplusArrayType(paramTypeC, members.get(i)); - println("retCls[retPos] = \"" + getSimpleType(getEnumType(prmType)) + "\";"); + String prmTypeC = checkAndGetCplusArgClsType(memTypes.get(i), members.get(i)); + println("retCls[retPos] = \"" + prmTypeC + "\";"); print("retObj[retPos++] = &retStruct."); print(getEnumParam(memTypes.get(i), getSimpleIdentifier(members.get(i)), i)); println(";"); @@ -3952,14 +3947,14 @@ public class IoTCompiler { println("paramObj[pos++] = &numStubs" + i + ";"); } else { // Generate normal classes if it's not a callback object String paramTypeC = checkAndGetCplusType(methPrmTypes.get(i)); - String prmTypeC = checkAndGetCplusArrayType(paramTypeC, methParams.get(i)); if (isEnumClass(getGenericType(paramTypeC))) { // Check if this is enum type println("vector paramEnumInt" + i + ";"); } else { String methParamComplete = checkAndGetCplusArray(paramTypeC, methParams.get(i)); println(methParamComplete + ";"); } - println("paramCls[pos] = \"" + getEnumType(prmTypeC) + "\";"); + String prmTypeC = checkAndGetCplusArgClsType(methPrmTypes.get(i), methParams.get(i)); + println("paramCls[pos] = \"" + prmTypeC + "\";"); if (isEnumClass(getGenericType(paramType))) // Check if this is enum type println("paramObj[pos++] = ¶mEnumInt" + i); else @@ -4257,7 +4252,6 @@ public class IoTCompiler { println(newSkelClass + "(" + intface + " *_mainObj, int _objectId) {"); println("mainObj = _mainObj;"); println("objectId = _objectId;"); - writeStructPermissionCplusSkeleton(methods, intDecl, intface); println("}\n"); } diff --git a/iotjava/iotrmi/C++/IoTRMIObject.hpp b/iotjava/iotrmi/C++/IoTRMIObject.hpp index 8e688a3..f7b9642 100644 --- a/iotjava/iotrmi/C++/IoTRMIObject.hpp +++ b/iotjava/iotrmi/C++/IoTRMIObject.hpp @@ -113,7 +113,6 @@ void IoTRMIObject::sendReturnObj(void* retObj[], string type[], int numRet) { // Need object bytes variable char retObjBytes[retLen]; returnToBytes(retObj, type, retObjBytes, numRet); - IoTRMIUtil::printBytes(retObjBytes, retLen, false); rmiServer->sendBytes(retObjBytes, retLen); } diff --git a/iotjava/iotrmi/C++/basics/TestClass.hpp b/iotjava/iotrmi/C++/basics/TestClass.hpp index 4dd11ff..1892ca0 100644 --- a/iotjava/iotrmi/C++/basics/TestClass.hpp +++ b/iotjava/iotrmi/C++/basics/TestClass.hpp @@ -48,6 +48,9 @@ class TestClass : public TestClassInterface { vector handleEnumArray(vector vecEn); vector handleEnumList(vector vecEn); + // Struct + Struct handleStruct(Struct str); + int getA(); void setA(int _int); void setB(float _float); @@ -290,6 +293,41 @@ vector TestClass::handleEnumList(vector vecEn) { } +// Struct +Struct TestClass::handleStruct(Struct str) { + + cout << "Name: " << str.name << endl; + cout << "Value: " << str.value << endl; + cout << "Year: " << str.year << endl; + + Struct test; + test.name = "Anonymous"; + test.value = 1.33; + test.year = 2016; + str = test; + + return str; +} + + +/*vector TestClass::handleStruct(vector vecStr) { + + for (Struct str : vecStr) { + + cout << "Name: " << str.name << endl; + cout << "Value: " << str.value << endl; + cout << "Year: " << str.year << endl; + } + Struct test; + test.name = "Anonymous"; + test.value = 1.33; + test.year = 2016; + vecStr.push_back(test); + + return vecStr; +}*/ + + string TestClass::sumArray(vector newA) { string sum = ""; diff --git a/iotjava/iotrmi/C++/basics/TestClass_Stub.cpp b/iotjava/iotrmi/C++/basics/TestClass_Stub.cpp index 01b0a90..c65cd64 100644 --- a/iotjava/iotrmi/C++/basics/TestClass_Stub.cpp +++ b/iotjava/iotrmi/C++/basics/TestClass_Stub.cpp @@ -100,6 +100,15 @@ int main(int argc, char *argv[]) for (Enum en : vecRes2) { cout << "Enum value: " << en << endl; } + cout << "==== STRUCT ====" << endl; + Struct str; + str.name = "Rahmadi"; + str.value = 0.123; + str.year = 2016; + Struct resStr = tcStub->handleStruct(str); + cout << "Name: " << resStr.name << endl; + cout << "Value:" << resStr.value << endl; + cout << "Year" << resStr.year << endl; cout << "==== OTHERS ====" << endl; cout << "Return value: " << tcStub->getA() << endl; diff --git a/iotjava/iotrmi/Java/basics/TestClass.java b/iotjava/iotrmi/Java/basics/TestClass.java index a7453a4..8844ffb 100644 --- a/iotjava/iotrmi/Java/basics/TestClass.java +++ b/iotjava/iotrmi/Java/basics/TestClass.java @@ -242,6 +242,44 @@ public class TestClass implements TestClassInterface { } + // Struct + public Struct handleStruct(Struct str) { + + System.out.println("Name: " + str.name); + System.out.println("Value: " + str.value); + System.out.println("Year: " + str.year); + + + Struct test = new Struct(); + test.name = "Anonymous"; + test.value = 1.33f; + test.year = 2016; + + str = test; + + return str; + } + + + /*public Struct[] handleStruct(Struct[] data) { + + for (Struct str : data) { + System.out.println("Name: " + str.name); + System.out.println("Value: " + str.value); + System.out.println("Year: " + str.year); + } + + Struct test = new Struct(); + test.name = "Anonymous"; + test.value = 1.33f; + test.year = 2016; + + data[0] = test; + + return data; + }*/ + + // Getters public String sumArray(String[] newA) { diff --git a/iotjava/iotrmi/Java/basics/TestClass_Stub.java b/iotjava/iotrmi/Java/basics/TestClass_Stub.java index 63c3fff..6f99992 100644 --- a/iotjava/iotrmi/Java/basics/TestClass_Stub.java +++ b/iotjava/iotrmi/Java/basics/TestClass_Stub.java @@ -71,6 +71,16 @@ public class TestClass_Stub { List resArr2 = tcstub.handleEnumList(enArr2); System.out.println("Enum members: " + resArr2.toString()); + System.out.println("==== STRUCT ===="); + Struct str = new Struct(); + str.name = "Rahmadi"; + str.value = 0.123f; + str.year = 2016; + Struct strRes = tcstub.handleStruct(str); + System.out.println("Name: " + strRes.name); + System.out.println("Value: " + strRes.value); + System.out.println("Year: " + strRes.year); + System.out.println("==== OTHERS ===="); System.out.println("Return value: " + tcstub.getA()); System.out.println("Return value: " + tcstub.setAndGetA(123));