64 bit Node and Element tags
We should switch MVertex::_num/_index and MElement::_num to 64 bit integers, to support meshes > 2 billion nodes/elements.
Doing so while ensuring C++98 support is complicated, as "long" is only 32 bits on Win64 (and 64 bits elsewhere). It would be better to ensure that we are 64 bit everywhere, while still using a standard C++ type and not some ugly OS-dependent typedef. C++11 defines "long long" (and optionally int64_t), which is guaranteed to be 64 bits: we should probably use that.
This is a non trivial change:
-
the binary MSH4 format should allow to store tags in 32 or 64 bits (to save space). We should use the currently unused
size(unsigned long)
field in$MeshFormat
(and change its meaning to "byte size of any tags in the file") to switch. All the binary I/O should be adapted to handle this. -
all the direct index-based iterations on std::vectors (currently using
unsigned int
) should switch tostd::vector<int>::size_type
. -
Note that we use negative node numbers in some meshing algorithms, so we should keep a signed type for nodes.