Changeset 7814 for trunk


Ignore:
Timestamp:
11/24/11 15:04:14 (8 years ago)
Author:
mario
Message:

use auto_ptr for an idea of memory management, and template print functions instead of many copies

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/legacy/jvmlink/src/main/c++/TestC2.cpp

    r7812 r7814  
    4343#include <iostream> // for cout and cerr 
    4444#include <stdio.h> // for getchar 
     45#include <memory> // for auto_ptr 
    4546 
    4647bool randomBool() { 
     
    7172} 
    7273 
    73 void printBools(bool* values, int len) { 
     74template <class T> 
     75void printValues(T* values, int len) { 
    7476        for (int i=0; i<len; i++) std::cout << " " << values[i]; 
    7577} 
    7678 
    77 void printBytes(Byte* values, int off, int len) { 
     79void printValues(Byte* values, int off, int len) { 
    7880        for (int i=off; i<off+len; i++) std::cout << " " << values[i].data; 
    79 } 
    80  
    81 void printChars(char* values, int len) { 
    82         for (int i=0; i<len; i++) std::cout << " " << values[i]; 
    83 } 
    84  
    85 void printDoubles(double* values, int len) { 
    86         for (int i=0; i<len; i++) std::cout << " " << values[i]; 
    87 } 
    88  
    89 void printFloats(float* values, int len) { 
    90         for (int i=0; i<len; i++) std::cout << " " << values[i]; 
    91 } 
    92  
    93 void printInts(int* values, int len) { 
    94         for (int i=0; i<len; i++) std::cout << " " << values[i]; 
    95 } 
    96  
    97 void printLongs(long long* values, int len) { 
    98         for (int i=0; i<len; i++) std::cout << " " << values[i]; 
    99 } 
    100  
    101 void printShorts(short* values, int len) { 
    102         for (int i=0; i<len; i++) std::cout << " " << values[i]; 
    103 } 
    104  
    105 void printStrings(std::string* values, int len) { 
    106         for (int i=0; i<len; i++) { 
    107                 std::cout << "\t" << values[i] << std::endl; 
    108         } 
    10981} 
    11082 
     
    128100        p->setVar("myBool", myBool); 
    129101        std::cout << "TestC2: setVar: myBool -> " << myBool << std::endl; 
    130         JVMLinkObject* jvmBool = p->getVar("myBool"); 
     102        std::auto_ptr<JVMLinkObject> jvmBool(p->getVar("myBool")); 
    131103        std::cout << "TestC2: getVar: myBool == " << jvmBool->getDataAsBool() << std::endl; 
    132104 
     
    135107        p->setVar("myByte", myByte); 
    136108        std::cout << "TestC2: setVar: myByte -> " << myByte.data << std::endl; 
    137         JVMLinkObject* jvmByte = p->getVar("myByte"); 
     109        std::auto_ptr<JVMLinkObject> jvmByte(p->getVar("myByte")); 
    138110        std::cout << "TestC2: getVar: myByte == " << jvmByte->getDataAsByte().data << std::endl; 
    139111 
     
    142114        p->setVar("myChar", myChar); 
    143115        std::cout << "TestC2: setVar: myChar -> " << myChar << std::endl; 
    144         JVMLinkObject* jvmChar = p->getVar("myChar"); 
     116        std::auto_ptr<JVMLinkObject> jvmChar(p->getVar("myChar")); 
    145117        std::cout << "TestC2: getVar: myChar == " << jvmChar->getDataAsChar() << std::endl; 
    146118 
     
    149121        p->setVar("myDouble", myDouble); 
    150122        std::cout << "TestC2: setVar: myDouble -> " << myDouble << std::endl; 
    151         JVMLinkObject* jvmDouble = p->getVar("myDouble"); 
     123        std::auto_ptr<JVMLinkObject> jvmDouble(p->getVar("myDouble")); 
    152124        std::cout << "TestC2: getVar: myDouble == " << jvmDouble->getDataAsDouble() << std::endl; 
    153125 
     
    156128        p->setVar("myFloat", myFloat); 
    157129        std::cout << "TestC2: setVar: myFloat -> " << myFloat << std::endl; 
    158         JVMLinkObject* jvmFloat = p->getVar("myFloat"); 
     130        std::auto_ptr<JVMLinkObject> jvmFloat(p->getVar("myFloat")); 
    159131        std::cout << "TestC2: getVar: myFloat == " << jvmFloat->getDataAsFloat() << std::endl; 
    160132 
     
    163135        p->setVar("myInt", myInt); 
    164136        std::cout << "TestC2: setVar: myInt -> " << myInt << std::endl; 
    165         JVMLinkObject* jvmInt = p->getVar("myInt"); 
     137        std::auto_ptr<JVMLinkObject> jvmInt(p->getVar("myInt")); 
    166138        std::cout << "TestC2: getVar: myInt == " << jvmInt->getDataAsInt() << 
    167139                (jvmInt->isDataNull() ? " (NULL)" : " (not NULL)") << std::endl; 
     
    171143        p->setVar("myLong", myLong); 
    172144        std::cout << "TestC2: setVar: myLong -> " << myLong << std::endl; 
    173         JVMLinkObject* jvmLong = p->getVar("myLong"); 
     145        std::auto_ptr<JVMLinkObject> jvmLong(p->getVar("myLong")); 
    174146        std::cout << "TestC2: getVar: myLong == " << jvmLong->getDataAsLong() << std::endl; 
    175147 
     
    178150        p->setVar("myShort", myShort); 
    179151        std::cout << "TestC2: setVar: myShort -> " << myShort << std::endl; 
    180         JVMLinkObject* jvmShort = p->getVar("myShort"); 
     152        std::auto_ptr<JVMLinkObject> jvmShort(p->getVar("myShort")); 
    181153        std::cout << "TestC2: getVar: myShort == " << jvmShort->getDataAsShort() << std::endl; 
    182154 
     
    185157        p->setVar("myString", &myString); 
    186158        std::cout << "TestC2: setVar: myString -> " << myString << std::endl; 
    187         JVMLinkObject* jvmString = p->getVar("myString"); 
     159        std::auto_ptr<JVMLinkObject> jvmString(p->getVar("myString")); 
    188160        std::cout << "TestC2: getVar: myString == " << *jvmString->getDataAsString() << std::endl; 
    189161 
     
    191163        p->setVarNull("myInt"); 
    192164        std::cout << "TestC2: setVar: myInt -> NULL" << std::endl; 
    193         JVMLinkObject* jvmNull = p->getVar("myInt"); 
     165        std::auto_ptr<JVMLinkObject> jvmNull(p->getVar("myInt")); 
    194166        std::cout << "TestC2: getVar: myInt == " << 
    195167                (jvmNull->isDataNull() ? "NULL" : "not NULL") << std::endl; 
    196168 
    197169        // non-existent variable 
    198         JVMLinkObject* jvmNonExist = p->getVar("myNonExist"); 
     170        std::auto_ptr<JVMLinkObject> jvmNonExist(p->getVar("myNonExist")); 
    199171        std::cout << "TestC2: getVar: myNonExist == " << 
    200172                (jvmNonExist->isDataNull() ? "NULL" : "not NULL") << std::endl; 
     
    233205        p->setVar("myBools", myBools, num); 
    234206        std::cout << "TestC2: setVar: myBools -> ["; 
    235         printBools(myBools, num); 
    236         std::cout << " ]" << std::endl; 
    237         JVMLinkObject* jvmBools = p->getVar("myBools"); 
     207        printValues(myBools, num); 
     208        std::cout << " ]" << std::endl; 
     209        std::auto_ptr<JVMLinkObject> jvmBools(p->getVar("myBools")); 
    238210        std::cout << "TestC2: getVar: myBools == ["; 
    239         printBools(jvmBools->getDataAsBoolArray(), num); 
     211        printValues(jvmBools->getDataAsBoolArray(), num); 
    240212        std::cout << " ]" << std::endl; 
    241213 
     
    243215        p->setVar("myBytes", myBytes, num); 
    244216        std::cout << "TestC2: setVar: myBytes -> ["; 
    245         printBytes(myBytes, 0, num); 
    246         std::cout << " ]" << std::endl; 
    247         JVMLinkObject* jvmBytes = p->getVar("myBytes"); 
     217        printValues(myBytes, 0, num); 
     218        std::cout << " ]" << std::endl; 
     219        std::auto_ptr<JVMLinkObject> jvmBytes(p->getVar("myBytes")); 
    248220        std::cout << "TestC2: getVar: myBytes == ["; 
    249         printBytes(jvmBytes->getDataAsByteArray(), 0, num); 
     221        printValues(jvmBytes->getDataAsByteArray(), 0, num); 
    250222        std::cout << " ]" << std::endl; 
    251223 
     
    253225        p->setVar("myChars", myChars, num); 
    254226        std::cout << "TestC2: setVar: myChars -> ["; 
    255         printChars(myChars, num); 
    256         std::cout << " ]" << std::endl; 
    257         JVMLinkObject* jvmChars = p->getVar("myChars"); 
     227        printValues(myChars, num); 
     228        std::cout << " ]" << std::endl; 
     229        std::auto_ptr<JVMLinkObject> jvmChars(p->getVar("myChars")); 
    258230        std::cout << "TestC2: getVar: myChars == ["; 
    259         printChars(jvmChars->getDataAsCharArray(), num); 
     231        printValues(jvmChars->getDataAsCharArray(), num); 
    260232        std::cout << " ]" << std::endl; 
    261233 
     
    263235        p->setVar("myDoubles", myDoubles, num); 
    264236        std::cout << "TestC2: setVar: myDoubles -> ["; 
    265         printDoubles(myDoubles, num); 
    266         std::cout << " ]" << std::endl; 
    267         JVMLinkObject* jvmDoubles = p->getVar("myDoubles"); 
     237        printValues(myDoubles, num); 
     238        std::cout << " ]" << std::endl; 
     239        std::auto_ptr<JVMLinkObject> jvmDoubles(p->getVar("myDoubles")); 
    268240        std::cout << "TestC2: getVar: myDoubles == ["; 
    269         printDoubles(jvmDoubles->getDataAsDoubleArray(), num); 
     241        printValues(jvmDoubles->getDataAsDoubleArray(), num); 
    270242        std::cout << " ]" << std::endl; 
    271243 
     
    273245        p->setVar("myFloats", myFloats, num); 
    274246        std::cout << "TestC2: setVar: myFloats -> ["; 
    275         printFloats(myFloats, num); 
    276         std::cout << " ]" << std::endl; 
    277         JVMLinkObject* jvmFloats = p->getVar("myFloats"); 
     247        printValues(myFloats, num); 
     248        std::cout << " ]" << std::endl; 
     249        std::auto_ptr<JVMLinkObject> jvmFloats(p->getVar("myFloats")); 
    278250        std::cout << "TestC2: getVar: myFloats == ["; 
    279         printFloats(jvmFloats->getDataAsFloatArray(), num); 
     251        printValues(jvmFloats->getDataAsFloatArray(), num); 
    280252        std::cout << " ]" << std::endl; 
    281253 
     
    283255        p->setVar("myInts", myInts, num); 
    284256        std::cout << "TestC2: setVar: myInts -> ["; 
    285         printInts(myInts, num); 
    286         std::cout << " ]" << std::endl; 
    287         JVMLinkObject* jvmInts = p->getVar("myInts"); 
     257        printValues(myInts, num); 
     258        std::cout << " ]" << std::endl; 
     259        std::auto_ptr<JVMLinkObject> jvmInts(p->getVar("myInts")); 
    288260        std::cout << "TestC2: getVar: myInts == ["; 
    289         printInts(jvmInts->getDataAsIntArray(), num); 
     261        printValues(jvmInts->getDataAsIntArray(), num); 
    290262        std::cout << " ]" << std::endl; 
    291263 
     
    293265        p->setVar("myLongs", myLongs, num); 
    294266        std::cout << "TestC2: setVar: myLongs -> ["; 
    295         printLongs(myLongs, num); 
    296         std::cout << " ]" << std::endl; 
    297         JVMLinkObject* jvmLongs = p->getVar("myLongs"); 
     267        printValues(myLongs, num); 
     268        std::cout << " ]" << std::endl; 
     269        std::auto_ptr<JVMLinkObject> jvmLongs(p->getVar("myLongs")); 
    298270        std::cout << "TestC2: getVar: myLongs == ["; 
    299         printLongs(jvmLongs->getDataAsLongArray(), num); 
     271        printValues(jvmLongs->getDataAsLongArray(), num); 
    300272        std::cout << " ]" << std::endl; 
    301273 
     
    303275        p->setVar("myShorts", myShorts, num); 
    304276        std::cout << "TestC2: setVar: myShorts -> ["; 
    305         printShorts(myShorts, num); 
    306         std::cout << " ]" << std::endl; 
    307         JVMLinkObject* jvmShorts = p->getVar("myShorts"); 
     277        printValues(myShorts, num); 
     278        std::cout << " ]" << std::endl; 
     279        std::auto_ptr<JVMLinkObject> jvmShorts(p->getVar("myShorts")); 
    308280        std::cout << "TestC2: getVar: myShorts == ["; 
    309         printShorts(jvmShorts->getDataAsShortArray(), num); 
     281        printValues(jvmShorts->getDataAsShortArray(), num); 
    310282        std::cout << " ]" << std::endl; 
    311283 
     
    317289        } 
    318290        std::cout << "]" << std::endl; 
    319         JVMLinkObject* jvmStrings = p->getVar("myStrings"); 
     291        std::auto_ptr<JVMLinkObject> jvmStrings(p->getVar("myStrings")); 
    320292        std::cout << "TestC2: getVar: myStrings == [" << std::endl; 
    321         printStrings(jvmStrings->getDataAsStringArray(), 6); 
     293        printValues(jvmStrings->getDataAsStringArray(), 6); 
    322294        std::cout << "]" << std::endl; 
    323295 
     
    354326        p->setVar("largeBytes", largeBytes, big); 
    355327        std::cout << "TestC2: setVar: largeBytes -> ["; 
    356         printBytes(largeBytes, 0, 3); 
     328        printValues(largeBytes, 0, 3); 
    357329        std::cout << " ..."; 
    358         printBytes(largeBytes, big / 2 - 1, 3); 
     330        printValues(largeBytes, big / 2 - 1, 3); 
    359331        std::cout << " ..."; 
    360         printBytes(largeBytes, big - 3, 3); 
    361         std::cout << " ]" << std::endl; 
    362         JVMLinkObject* jvmLargeBytes = p->getVar("largeBytes"); 
     332        printValues(largeBytes, big - 3, 3); 
     333        std::cout << " ]" << std::endl; 
     334        std::auto_ptr<JVMLinkObject> jvmLargeBytes(p->getVar("largeBytes")); 
    363335        std::cout << "TestC2: getVar: largeBytes == ["; 
    364336        Byte* largeBytes2 = jvmLargeBytes->getDataAsByteArray(); 
    365         printBytes(largeBytes2, 0, 3); 
     337        printValues(largeBytes2, 0, 3); 
    366338        std::cout << " ..."; 
    367         printBytes(largeBytes2, big / 2 - 1, 3); 
     339        printValues(largeBytes2, big / 2 - 1, 3); 
    368340        std::cout << " ..."; 
    369         printBytes(largeBytes2, big - 3, 3); 
     341        printValues(largeBytes2, big - 3, 3); 
    370342        std::cout << " ]" << std::endl; 
    371343 
Note: See TracChangeset for help on using the changeset viewer.