Hi,
I made a important change in cxxtools::SerializationInfo.
The subnodes were held in a std::vector. We got a crash in our
application since addMember might reallocate the vector, which
invalidates the references previously got from addMember on that node.
So I changed the container into a std::deque, which do not invalidate
references.
I partly understand, why gcc on MacOS X has problems with that. The
class SerializationInfo has a member of type
std::deque<SerializationInfo>. But the compiler do not know the full
class when it sees the declaration. I'm quite sure this is fully legal
C++. And it was ok with std::vector.
But I have a idea, how to help the compiler.
Instead of holding a std::deque, it may just have a pointer to a std::deque.
There is a drawback but also a advantage. The drawback is, that
SerializationInfo has to allocate the deque, which is a additional
allocation. The advantage is that the sizeof(SerializationInfo) will be
reduces. On my system sizeof(deque) is 80 but the sizeof(pointer) is
just 8, so the sizeof(SerializationInfo will be reduced by 72 bytes. I
guess that most of the SerializationInfos won't have subnodes. There in
normal applications more values than arrays or objects to serialize, so
that overall memory consumption will be reduced.
There are many unittests for SerializationInfo and all rpc unittests and
others use SerializationInfo also. So the risk to break something is
negligible.
Tommi
Am 25.07.2015 um 07:33 schrieb Jean-Marc Choulet:
Hello,
I have installed manually automate, autoconf, …
I can run autoreconf without errors . I have now a error when I try to
compile cxxtools :
make
Making all in src
… lines deleted …
In file included from csvdeserializer.cpp:29:
In file included from ../include/cxxtools/csvdeserializer.h:33:
In file included from ../include/cxxtools/deserializer.h:33:
In file included from ../include/cxxtools/composer.h:31:
In file included from ../include/cxxtools/serializationinfo.h:39:
*/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/deque:912:49:
**error: **invalid application of 'sizeof' to an*
* incomplete type 'value_type' (aka 'cxxtools::SerializationInfo')*
static const difference_type __block_size = sizeof(value_type) < 256
? 4096 / sizeof(value_type) : 16;
* ^~~~~~~~~~~~~~~~~~*
*/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/deque:1183:15:
note: *in instantiation of template class
'std::__1::__deque_base<cxxtools::SerializationInfo,
std::__1::allocator<cxxtools::SerializationInfo> >' requested here
: private __deque_base<_Tp, _Allocator>
* ^*
*../include/cxxtools/serializationinfo.h:120:17: note: *in
instantiation of template class
'std::__1::deque<cxxtools::SerializationInfo,
std::__1::allocator<cxxtools::SerializationInfo> >' requested here
typedef Nodes::iterator Iterator;
* ^*
*../include/cxxtools/serializationinfo.h:110:7: note: *definition of
'cxxtools::SerializationInfo' is not complete until the closing '}'
class SerializationInfo
* ^*
In file included from csvdeserializer.cpp:29:
In file included from ../include/cxxtools/csvdeserializer.h:33:
In file included from ../include/cxxtools/deserializer.h:33:
In file included from ../include/cxxtools/composer.h:31:
In file included from ../include/cxxtools/serializationinfo.h:39:
*/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/deque:1193:30:
**error: **'__alloc_traits' is a protected member*
* of 'std::__1::__deque_base<cxxtools::SerializationInfo,
std::__1::allocator<cxxtools::SerializationInfo> >'*
typedef typename __base::__alloc_traits __alloc_traits;
* ^*
*../include/cxxtools/serializationinfo.h:120:17: note: *in
instantiation of template class
'std::__1::deque<cxxtools::SerializationInfo,
std::__1::allocator<cxxtools::SerializationInfo> >' requested here
typedef Nodes::iterator Iterator;
* ^*
*/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/deque:904:54:
note: *declared protected here
typedef allocator_traits<allocator_type> __alloc_traits;
* ^*
*… lines deleted ...*
* ^*
*/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/deque:1359:30:
**error: **'__map_const_pointer' is a protected*
* member of 'std::__1::__deque_base<cxxtools::SerializationInfo,
std::__1::allocator<cxxtools::SerializationInfo> >'*
typedef typename __base::__map_const_pointer __map_const_pointer;
* ^*
*/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/deque:930:81:
note: *declared protected here
typedef typename
allocator_traits<__const_pointer_allocator>::const_pointer
__map_const_pointer;
* ^*
In file included from csvdeserializer.cpp:29:
In file included from ../include/cxxtools/csvdeserializer.h:33:
In file included from ../include/cxxtools/deserializer.h:33:
In file included from ../include/cxxtools/composer.h:31:
*../include/cxxtools/serializationinfo.h:679:9: **error: **indirection
requires pointer operand ('SerializationInfo::ConstIterator' (aka
'int') invalid)*
*it >>= vec.back();
* ^~~*
*../include/cxxtools/serializationinfo.h:707:9: **error: **indirection
requires pointer operand ('SerializationInfo::ConstIterator' (aka
'int') invalid)*
*it >>= list.back();
* ^~~*
*../include/cxxtools/serializationinfo.h:735:9: **error: **indirection
requires pointer operand ('SerializationInfo::ConstIterator' (aka
'int') invalid)*
*it >>= deque.back();
* ^~~*
*../include/cxxtools/serializationinfo.h:763:9: **error: **indirection
requires pointer operand ('SerializationInfo::ConstIterator' (aka
'int') invalid)*
*it >>= t;
* ^~~*
*../include/cxxtools/serializationinfo.h:792:9: **error: **indirection
requires pointer operand ('SerializationInfo::ConstIterator' (aka
'int') invalid)*
*it >>= t;
* ^~~*
*../include/cxxtools/serializationinfo.h:838:9: **error: **indirection
requires pointer operand ('SerializationInfo::ConstIterator' (aka
'int') invalid)*
*it >>= v;
* ^~~*
*../include/cxxtools/serializationinfo.h:868:9: **error: **indirection
requires pointer operand ('SerializationInfo::ConstIterator' (aka
'int') invalid)*
*it >>= v;
* ^~~*
*../include/cxxtools/serializationinfo.h:927:9: **error: **indirection
requires pointer operand ('SerializationInfo::ConstIterator' (aka
'int') invalid)*
*it >>= t;
* ^~~*
*fatal error: **too many errors emitted, stopping now [-ferror-limit=]*
20 errors generated.
make[2]: *** [csvdeserializer.lo] Error 1
make[1]: *** [all] Error 2
make: *** [all-recursive] Error 1
MacBook-Pro-de-Jean-Marc:cxxtools
Is it possible to compile tntnet on Mac OS X ?
Thanks,
Jean-Marc
------------------------------------------------------------------------------
_______________________________________________
Tntnet-general mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/tntnet-general
------------------------------------------------------------------------------
_______________________________________________
Tntnet-general mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/tntnet-general