Thanks everyone, unfortunatly I'm still stuck.....

@ Stephane, this is what I'm doing, but it's not working:
sizeof( test.A ) + sizeof( double ) * test.A.size() + sizeof( test.B ) +
sizeof( double ) * test.B.size() + sizeof( bool ) * 2

@ Guillame
Thanks, I tryed your example but I'm probably doing it the wrong way:

Foo Test;
//Set some values
Test.A->pushback(12);
Test.B->pushback(24);
Test.B->pushback(32);
Test.C->pushback(true);
Test.D->pushback(false);

 myMap.PutItemValue( i, (unsigned char*)&Test, sizeof( Foo )) ;

// Get them back
const unsigned char* pInternalData = NULL ;
UINT cntData = 0 ;
myMap.GetItemValue( 0, pInternalData, cntData ) ;

Foo *pData = (Foo*) pInternalData ;
if(pData)
{
        Application().LogMessage("nb  "+CString(pData->A->size()));
}

this return empty vector....

@MAB
Could you point me to some ressources on the web about this?

Thanks!!



-----------------------------------------------
Ahmidou Lyazidi
Director | TD | CG artist
http://vimeo.com/ahmidou/videos
http://www.cappuccino-films.com


2013/6/10 Marc-Andre Belzile <marc-andre.belz...@autodesk.com>

> Alternatively, you could store C++ buffers in your struct instead of
> std::vector objects. Then if you need to access your data with stl, just
> assign each buffer to an std::vector out from these buffers.
>
> If you can't afford the extra copy performed by std::vector constructor,
> you'll need to implement your own wrapper class deriving from std::vector
> that nulls out the internal container upon destruction.
> This is required to avoid std::vector to deallocate your buffer memory.
>
> Of course I haven't tested this solution yet but it should work. :)
>
> -mab
>
> From: softimage-boun...@listproc.autodesk.com [mailto:
> softimage-boun...@listproc.autodesk.com] On Behalf Of Guillaume Laforge
> Sent: Sunday, June 09, 2013 3:29 PM
> To: softimage@listproc.autodesk.com
> Subject: Re: [C++] Store a structure of vector in a UserData
>
> Well, if you need the exact number of bytes, you will need to take into
> account the size of std::vector objects I think :).
>
>
> On Sun, Jun 9, 2013 at 10:07 AM, Stephan Woermann <
> swoerman...@googlemail.com<mailto:swoerman...@googlemail.com>> wrote:
> To get the total size of the struct, this should work:
>
> Foo test;
> sizeof( double ) * test.A.size() + sizeof( double ) * test.B.size() +
> sizeof( bool ) * 2
> Stephan
>
> 2013/6/9 Guillaume Laforge <guillaume.laforge...@gmail.com<mailto:
> guillaume.laforge...@gmail.com>>
> Hi Ahmidou :),
>
> You could try to use pointers to std::vector. This way you will be able to
> access those vector and get the double values correctly.
> But you must handle the allocation/deallocation of those vectors by
> yourself:
>
> struct Foo{
>     std::vector<double> *A;
>     std::vector<double> *B;
>     bool C;
>     bool D;
>
>     Foo()
>     {
>         A = new std::vector<double>;
>         B = new std::vector<double>;
>     }
>     ~Foo()
>     {
>         delete A;
>         delete B;
>     }
> };
>
> Hope this help,
>
> Guillaume
>
> On Sun, Jun 9, 2013 at 8:07 AM, Ahmidou Lyazidi <ahmidou....@gmail.com
> <mailto:ahmidou....@gmail.com>> wrote:
> Hi List,
> Is it possible to store this kind of struct in a UserData (map or blob):
>
> struct Foo{
>     std::vector<double> A;
>     std::vector<double> B;
>     bool C;
>     bool D;
> };
> I can pull out the structure, and the vectors have the good number of
> item...but they are empty, the values are gone
>
> I'm not sure, but I think it's lost because of the size parameter in
> UserDataMap.PutItemValue
> I tried to set the real size ( sizeof(vector)+
> sizeof(double)*vector::size() ) but this gave me some crazy results.
> Any idea?
> Thanks
>
> -----------------------------------------------
> Ahmidou Lyazidi
> Director | TD | CG artist
> http://vimeo.com/ahmidou/videos
> http://www.cappuccino-films.com
>
>
>
>

Reply via email to