Hi Valery, > On 8 Aug 2018, at 09:10, Valery Kotov <[email protected]> wrote: > > Hello all, > > I have a question about QV4 heap objects and what could be stored in them. > I would like to move data structure from c++ heap to GC heap. Unfortunately, > my data structure stores a pair of QLists internally. > As far as I'm aware, QV4::Heap objects should be "trivially constructible", > and thus, cannot store QList(s). > One option would be to store QList pointer and manage it's lifecycle > manually. But that does not sound like a good idea. > I've noticed though, that some of qv4 types are using DECLARE_MARKOBJECTS > macro. By using DECLARE_MARKOBJECTS macro and ObjectMember(s) define I can > actually store a ValueArray member in my QV4 heap object. > > #define MyObjectMembers(class, Member) \ > Member(class, ValueArray, ValueArray, myValues) > > DECLARE_HEAP_OBJECT(MyObject, Object) { > DECLARE_MARKOBJECTS(MyObject); > > In this case I can refer to myValues ValueArray type inside of MyObject. > Unfortunately, it is a little bit unclear to me how to manage ValueArrays. > From what I can see from some examples in the code (qv4generatorobject, > qv4arraydata), it seems that I need to manage ValueArray manually. > What I'm missing at the moment a little bit is how the actually allocation > for ValueArray.values is done. > I suspect that it is probably not done via plain "new" call. Otherwise it is > a little bit confusing why not just to store the pointer directly. > > Could you guys please give me a few hints how to go about ValueArray > management?
ValueArrays are allocated with a given size together with the object through the memory manager. They are rather low level, and can’t be resized after initial allocation. That means to get a larger ValueArray you need to allocate a new object. Maybe what you need is closer to a Pointer to a SimpleArrayData. Those are separately allocated by the memory manager, and you can grow the array using SimpleArrayData::reallocate(). Cheers, Lars _______________________________________________ Development mailing list [email protected] http://lists.qt-project.org/mailman/listinfo/development
