[omniORB] sequence mapping in C++
    Thierry DESCOMBES 
    descombt at ipnl.in2p3.fr
       
    Tue Mar  2 09:48:15 GMT 2004
    
    
  
Hi,
I need help for using a mapped sequence in C++. Here is the IDL type 
declaration:
     typedef unsigned short Adc;
     typedef octet Canal;
     typedef long TimeCpt; // Signé pour que le tri soit + facile !
     struct AdcData
     {
         Adc     adcValue;
         Canal   canalValue;
     };
     typedef sequence<boolean> SeqHitData;
     typedef sequence<AdcData> SeqAdcData;
     struct AdcEventData
     {
         TimeCpt cptTimeValue;
         SeqAdcData adcs;
         SeqHitData hits;
     };
     typedef sequence<AdcEventData> SeqAdcEventData;
I'd like the sequence to be initialized by a function... but the following 
code causes memory leak:
   void main()
   {
     ...
     SeqAdcEventData *seq=readData();
     ...
   }
   //----- I'm trying to do something like that:
   SeqAdcEventData *readData()
   {
     SeqAdcEventData *seq=new SeqAdcEventData(1000);
     AdcEventData currentAdcEventData;
     for (int i=0; i<rand()%1500; i++)
     {
       currentAdcEventData.adcs.length(64);
       // to be less complicated:
       currentAdcEventData.hits.length(0);
       currentAdcEventData.cptTimeValue=rand()%10000;
       for (int j=0; j<rand()%64; j++)
       {
         AdcData adcDatas;
         adcDatas.adcValue=rand()%1024;
         adcDatas.canalValue=rand()%64;
         currentAdcEventData.adcs[j]=adcDatas;
       }
       (*seq)[i]=currentAdcEventData;
   }
   return seq;
}
What is the correct way to do that ? In the book "advanced CORBA 
Programming with C++", I can read "Never pass a sequence to a function for 
modification if the release flag is false". So in my case, how must I do to 
have the flag set to true? Pleeeaasse Hellp !!!!
Thanks a lot in advance.
Cheers,
Thierry
    
    
More information about the omniORB-list
mailing list