Changeset 3834


Ignore:
Timestamp:
03/17/08 15:42:27 (12 years ago)
Author:
curtis
Message:

Add support for nulls.

Location:
trunk/loci/jvmlink
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • trunk/loci/jvmlink/ConnThread.java

    r3833 r3834  
    389389    String sType = type == 0 ? type + "/" + insideType : "" + type; 
    390390    debug("setVar (" + sType + "): " + name + " = " + getValue(value)); 
    391     if (value != null) r.setVar(name, value); 
     391    r.setVar(name, value); 
    392392  } 
    393393 
     
    449449      else if (value instanceof Long) type = LONG_TYPE; 
    450450      else if (value instanceof Short) type = SHORT_TYPE; 
     451      else if (value == null) type = NULL_TYPE; 
    451452      else debug("Unknown type for value: " + value.getClass().getName()); 
    452453    } 
     
    703704      case CHAR_TYPE: 
    704705      case BOOLEAN_TYPE: 
    705       case NULL_TYPE: 
    706706        return 1; 
    707707      case SHORT_TYPE: 
     
    713713      case LONG_TYPE: 
    714714        return 8; 
     715      case NULL_TYPE: 
    715716      case STRING_TYPE: // string size is variable 
    716717      default: 
  • trunk/loci/jvmlink/cpp/JVMLinkClient.cpp

    r3833 r3834  
    140140                obj->size = 0; 
    141141                debug("getVar: got string: length=" << len << ", value=" << buf); 
     142        } 
     143        else if (obj->type == NULL_TYPE) { 
     144                obj->data = NULL; 
     145                obj->size = 0; 
     146                debug("getVar: got NULL value"); 
    142147        } 
    143148        else { 
     
    311316} 
    312317 
     318void JVMLinkClient::setVarNull(CString argname) { 
     319        debug("setVarNull: " << argname); 
     320        JVMLinkObject* jvmObj = new JVMLinkObject(argname, NULL_TYPE, NULL); 
     321        setVar(jvmObj); 
     322        delete jvmObj;   
     323} 
     324 
    313325// -- Private methods -- 
    314326 
  • trunk/loci/jvmlink/cpp/JVMLinkClient.h

    r3833 r3834  
    8484        void setVar(CString, short); 
    8585        void setVar(CString, short*, int); 
     86        void setVarNull(CString); 
    8687        void exec(CString); 
    8788 
  • trunk/loci/jvmlink/cpp/JVMLinkObject.cpp

    r3830 r3834  
    153153} 
    154154 
     155bool JVMLinkObject::isDataNull() { 
     156        return type == NULL_TYPE; 
     157} 
     158 
    155159int JVMLinkObject::getSize(Type type) { 
    156160        switch (type) { 
     
    158162                case CHAR_TYPE: 
    159163                case BOOL_TYPE: 
    160                 case NULL_TYPE: 
    161164                        return 1; 
    162165                case SHORT_TYPE: 
     
    168171                case LONG_TYPE: 
    169172                        return 8; 
     173                case NULL_TYPE: 
    170174                case STRING_TYPE: // string size is variable 
    171175                default: 
  • trunk/loci/jvmlink/cpp/JVMLinkObject.h

    r3830 r3834  
    9393        short getDataAsShort(); 
    9494        short* getDataAsShortArray(); 
     95        bool isDataNull(); 
    9596}; 
  • trunk/loci/jvmlink/cpp/TestC2.cpp

    r3833 r3834  
    113113        bool myBool = randomBool(); 
    114114        p->setVar("myBool", myBool); 
    115         std::cout << "TestC2: setVar: myBool = " << myBool << std::endl; 
     115        std::cout << "TestC2: setVar: myBool -> " << myBool << std::endl; 
    116116        JVMLinkObject* jvmBool = p->getVar("myBool"); 
    117         std::cout << "TestC2: getVar: myBool = " << jvmBool->getDataAsBool() << std::endl; 
     117        std::cout << "TestC2: getVar: myBool == " << jvmBool->getDataAsBool() << std::endl; 
    118118 
    119119        // Byte variables 
    120120        Byte myByte = randomByte(); 
    121121        p->setVar("myByte", myByte); 
    122         std::cout << "TestC2: setVar: myByte = " << myByte.data << std::endl; 
     122        std::cout << "TestC2: setVar: myByte -> " << myByte.data << std::endl; 
    123123        JVMLinkObject* jvmByte = p->getVar("myByte"); 
    124         std::cout << "TestC2: getVar: myByte = " << jvmByte->getDataAsByte().data << std::endl; 
     124        std::cout << "TestC2: getVar: myByte == " << jvmByte->getDataAsByte().data << std::endl; 
    125125 
    126126        // char variables 
    127127        char myChar = randomChar(); 
    128128        p->setVar("myChar", myChar); 
    129         std::cout << "TestC2: setVar: myChar = " << myChar << std::endl; 
     129        std::cout << "TestC2: setVar: myChar -> " << myChar << std::endl; 
    130130        JVMLinkObject* jvmChar = p->getVar("myChar"); 
    131         std::cout << "TestC2: getVar: myChar = " << jvmChar->getDataAsChar() << std::endl; 
     131        std::cout << "TestC2: getVar: myChar == " << jvmChar->getDataAsChar() << std::endl; 
    132132 
    133133        // double variables 
    134134        double myDouble = randomDouble(); 
    135135        p->setVar("myDouble", myDouble); 
    136         std::cout << "TestC2: setVar: myDouble = " << myDouble << std::endl; 
     136        std::cout << "TestC2: setVar: myDouble -> " << myDouble << std::endl; 
    137137        JVMLinkObject* jvmDouble = p->getVar("myDouble"); 
    138         std::cout << "TestC2: getVar: myDouble = " << jvmDouble->getDataAsDouble() << std::endl; 
     138        std::cout << "TestC2: getVar: myDouble == " << jvmDouble->getDataAsDouble() << std::endl; 
    139139 
    140140        // float variables 
    141141        float myFloat = randomFloat(); 
    142142        p->setVar("myFloat", myFloat); 
    143         std::cout << "TestC2: setVar: myFloat = " << myFloat << std::endl; 
     143        std::cout << "TestC2: setVar: myFloat -> " << myFloat << std::endl; 
    144144        JVMLinkObject* jvmFloat = p->getVar("myFloat"); 
    145         std::cout << "TestC2: getVar: myFloat = " << jvmFloat->getDataAsFloat() << std::endl; 
     145        std::cout << "TestC2: getVar: myFloat == " << jvmFloat->getDataAsFloat() << std::endl; 
    146146 
    147147        // int variables 
    148148        int myInt = randomInt(); 
    149149        p->setVar("myInt", myInt); 
    150         std::cout << "TestC2: setVar: myInt = " << myInt << std::endl; 
     150        std::cout << "TestC2: setVar: myInt -> " << myInt << std::endl; 
    151151        JVMLinkObject* jvmInt = p->getVar("myInt"); 
    152         std::cout << "TestC2: getVar: myInt = " << jvmInt->getDataAsInt() << std::endl; 
     152        std::cout << "TestC2: getVar: myInt == " << jvmInt->getDataAsInt() << 
     153                (jvmInt->isDataNull() ? " (NULL)" : " (not NULL)") << std::endl; 
    153154 
    154155        // long variables 
    155156        long long myLong = randomLong(); 
    156157        p->setVar("myLong", myLong); 
    157         std::cout << "TestC2: setVar: myLong = " << myLong << std::endl; 
     158        std::cout << "TestC2: setVar: myLong -> " << myLong << std::endl; 
    158159        JVMLinkObject* jvmLong = p->getVar("myLong"); 
    159         std::cout << "TestC2: getVar: myLong = " << jvmLong->getDataAsLong() << std::endl; 
     160        std::cout << "TestC2: getVar: myLong == " << jvmLong->getDataAsLong() << std::endl; 
    160161 
    161162        // short variables 
    162163        short myShort = randomShort(); 
    163164        p->setVar("myShort", myShort); 
    164         std::cout << "TestC2: setVar: myShort = " << myShort << std::endl; 
     165        std::cout << "TestC2: setVar: myShort -> " << myShort << std::endl; 
    165166        JVMLinkObject* jvmShort = p->getVar("myShort"); 
    166         std::cout << "TestC2: getVar: myShort = " << jvmShort->getDataAsShort() << std::endl; 
     167        std::cout << "TestC2: getVar: myShort == " << jvmShort->getDataAsShort() << std::endl; 
    167168 
    168169        // CString variables 
    169170        CString myString = "<<The quick brown fox jumps over the lazy dog.>>"; 
    170171        p->setVar("myString", &myString); 
    171         std::cout << "TestC2: setVar: myString = " << myString << std::endl; 
     172        std::cout << "TestC2: setVar: myString -> " << myString << std::endl; 
    172173        JVMLinkObject* jvmString = p->getVar("myString"); 
    173         std::cout << "TestC2: getVar: myString = " << *jvmString->getDataAsString() << std::endl; 
     174        std::cout << "TestC2: getVar: myString == " << *jvmString->getDataAsString() << std::endl; 
     175 
     176        // null variable 
     177        p->setVarNull("myInt"); 
     178        std::cout << "TestC2: setVar: myInt -> NULL" << std::endl; 
     179        JVMLinkObject* jvmNull = p->getVar("myInt"); 
     180        std::cout << "TestC2: getVar: myInt == " << 
     181                (jvmNull->isDataNull() ? "NULL" : "not NULL") << std::endl; 
     182 
     183        // non-existent variable 
     184        JVMLinkObject* jvmNonExist = p->getVar("myNonExist"); 
     185        std::cout << "TestC2: getVar: myNonExist == " << 
     186                (jvmNonExist->isDataNull() ? "NULL" : "not NULL") << std::endl; 
    174187 
    175188        // arrays 
     
    205218        // bool arrays 
    206219        p->setVar("myBools", myBools, num); 
    207         std::cout << "TestC2: setVar: myBools = ["; 
     220        std::cout << "TestC2: setVar: myBools -> ["; 
    208221        printBools(myBools, num); 
    209222        std::cout << " ]" << std::endl; 
    210223        JVMLinkObject* jvmBools = p->getVar("myBools"); 
    211         std::cout << "TestC2: getVar: myBools = ["; 
     224        std::cout << "TestC2: getVar: myBools == ["; 
    212225        printBools(jvmBools->getDataAsBoolArray(), num); 
    213226        std::cout << " ]" << std::endl; 
     
    215228        // Byte arrays 
    216229        p->setVar("myBytes", myBytes, num); 
    217         std::cout << "TestC2: setVar: myBytes = ["; 
     230        std::cout << "TestC2: setVar: myBytes -> ["; 
    218231        printBytes(myBytes, 0, num); 
    219232        std::cout << " ]" << std::endl; 
    220233        JVMLinkObject* jvmBytes = p->getVar("myBytes"); 
    221         std::cout << "TestC2: getVar: myBytes = ["; 
     234        std::cout << "TestC2: getVar: myBytes == ["; 
    222235        printBytes(jvmBytes->getDataAsByteArray(), 0, num); 
    223236        std::cout << " ]" << std::endl; 
     
    225238        // char arrays 
    226239        p->setVar("myChars", myChars, num); 
    227         std::cout << "TestC2: setVar: myChars = ["; 
     240        std::cout << "TestC2: setVar: myChars -> ["; 
    228241        printChars(myChars, num); 
    229242        std::cout << " ]" << std::endl; 
    230243        JVMLinkObject* jvmChars = p->getVar("myChars"); 
    231         std::cout << "TestC2: getVar: myChars = ["; 
     244        std::cout << "TestC2: getVar: myChars == ["; 
    232245        printChars(jvmChars->getDataAsCharArray(), num); 
    233246        std::cout << " ]" << std::endl; 
     
    235248        // double arrays 
    236249        p->setVar("myDoubles", myDoubles, num); 
    237         std::cout << "TestC2: setVar: myDoubles = ["; 
     250        std::cout << "TestC2: setVar: myDoubles -> ["; 
    238251        printDoubles(myDoubles, num); 
    239252        std::cout << " ]" << std::endl; 
    240253        JVMLinkObject* jvmDoubles = p->getVar("myDoubles"); 
    241         std::cout << "TestC2: getVar: myDoubles = ["; 
     254        std::cout << "TestC2: getVar: myDoubles == ["; 
    242255        printDoubles(jvmDoubles->getDataAsDoubleArray(), num); 
    243256        std::cout << " ]" << std::endl; 
     
    245258        // float arrays 
    246259        p->setVar("myFloats", myFloats, num); 
    247         std::cout << "TestC2: setVar: myFloats = ["; 
     260        std::cout << "TestC2: setVar: myFloats -> ["; 
    248261        printFloats(myFloats, num); 
    249262        std::cout << " ]" << std::endl; 
    250263        JVMLinkObject* jvmFloats = p->getVar("myFloats"); 
    251         std::cout << "TestC2: getVar: myFloats = ["; 
     264        std::cout << "TestC2: getVar: myFloats == ["; 
    252265        printFloats(jvmFloats->getDataAsFloatArray(), num); 
    253266        std::cout << " ]" << std::endl; 
     
    255268        // int arrays 
    256269        p->setVar("myInts", myInts, num); 
    257         std::cout << "TestC2: setVar: myInts = ["; 
     270        std::cout << "TestC2: setVar: myInts -> ["; 
    258271        printInts(myInts, num); 
    259272        std::cout << " ]" << std::endl; 
    260273        JVMLinkObject* jvmInts = p->getVar("myInts"); 
    261         std::cout << "TestC2: getVar: myInts = ["; 
     274        std::cout << "TestC2: getVar: myInts == ["; 
    262275        printInts(jvmInts->getDataAsIntArray(), num); 
    263276        std::cout << " ]" << std::endl; 
     
    265278        // long arrays 
    266279        p->setVar("myLongs", myLongs, num); 
    267         std::cout << "TestC2: setVar: myLongs = ["; 
     280        std::cout << "TestC2: setVar: myLongs -> ["; 
    268281        printLongs(myLongs, num); 
    269282        std::cout << " ]" << std::endl; 
    270283        JVMLinkObject* jvmLongs = p->getVar("myLongs"); 
    271         std::cout << "TestC2: getVar: myLongs = ["; 
     284        std::cout << "TestC2: getVar: myLongs == ["; 
    272285        printLongs(jvmLongs->getDataAsLongArray(), num); 
    273286        std::cout << " ]" << std::endl; 
     
    275288        // short arrays 
    276289        p->setVar("myShorts", myShorts, num); 
    277         std::cout << "TestC2: setVar: myShorts = ["; 
     290        std::cout << "TestC2: setVar: myShorts -> ["; 
    278291        printShorts(myShorts, num); 
    279292        std::cout << " ]" << std::endl; 
    280293        JVMLinkObject* jvmShorts = p->getVar("myShorts"); 
    281         std::cout << "TestC2: getVar: myShorts = ["; 
     294        std::cout << "TestC2: getVar: myShorts == ["; 
    282295        printShorts(jvmShorts->getDataAsShortArray(), num); 
    283296        std::cout << " ]" << std::endl; 
     
    285298        // CString arrays 
    286299        p->setVar("myStrings", myStrings, 6); 
    287         std::cout << "TestC2: setVar: myStrings = [" << std::endl; 
     300        std::cout << "TestC2: setVar: myStrings -> [" << std::endl; 
    288301        for (int i=0; i<6; i++) { 
    289302                std::cout << "\t" << myStrings[i] << std::endl; 
     
    291304        std::cout << "]" << std::endl; 
    292305        JVMLinkObject* jvmStrings = p->getVar("myStrings"); 
    293         std::cout << "TestC2: getVar: myStrings = [" << std::endl; 
     306        std::cout << "TestC2: getVar: myStrings == [" << std::endl; 
    294307        printStrings(jvmStrings->getDataAsStringArray(), 6); 
    295308        std::cout << "]" << std::endl; 
     
    326339 
    327340        p->setVar("largeBytes", largeBytes, big); 
    328         std::cout << "TestC2: setVar: largeBytes = ["; 
     341        std::cout << "TestC2: setVar: largeBytes -> ["; 
    329342        printBytes(largeBytes, 0, 3); 
    330343        std::cout << " ..."; 
     
    334347        std::cout << " ]" << std::endl; 
    335348        JVMLinkObject* jvmLargeBytes = p->getVar("largeBytes"); 
    336         std::cout << "TestC2: getVar: largeBytes = ["; 
     349        std::cout << "TestC2: getVar: largeBytes == ["; 
    337350        Byte* largeBytes2 = jvmLargeBytes->getDataAsByteArray(); 
    338351        printBytes(largeBytes2, 0, 3); 
Note: See TracChangeset for help on using the changeset viewer.