Commit 14570f62 authored by Alexandre Duret-Lutz's avatar Alexandre Duret-Lutz
Browse files

bivect: workaround flexible arrays not being standard C++

This is a -pedantic warning from gcc.

* src/misc/bitvect.cc, src/misc/bitvect.hh (storage_): Remove.
(storage): New method to access past the end of the struct.
parent 52ce449b
......@@ -160,7 +160,7 @@ namespace spot
bitvect_array* bva = new(mem) bitvect_array(vectcount, bvsize);
// Initialize all the bitvect instances.
for (size_t i = 0; i < vectcount; ++i)
new(bva->storage_ + i * bvsize) bitvect(bitcount, n);
new(bva->storage() + i * bvsize) bitvect(bitcount, n);
return bva;
}
......
......@@ -456,6 +456,17 @@ namespace spot
SPOT_LOCAL bitvect_array(const bitvect_array&) SPOT_DELETED;
SPOT_LOCAL void operator=(const bitvect_array&) SPOT_DELETED;
// Extra storage has been allocated at the end of the struct.
char* storage()
{
return reinterpret_cast<char*>(this) + sizeof(*this);
}
const char* storage() const
{
return reinterpret_cast<const char*>(this) + sizeof(*this);
}
public:
~bitvect_array()
{
......@@ -473,14 +484,14 @@ namespace spot
bitvect& at(const size_t index)
{
assert(index < size_);
return *reinterpret_cast<bitvect*>(storage_ + index * bvsize_);
return *reinterpret_cast<bitvect*>(storage() + index * bvsize_);
}
/// Return the bit-vector at \a index.
const bitvect& at(const size_t index) const
{
assert(index < size_);
return *reinterpret_cast<const bitvect*>(storage_ + index * bvsize_);
return *reinterpret_cast<const bitvect*>(storage() + index * bvsize_);
}
friend SPOT_API bitvect_array*
......@@ -495,7 +506,6 @@ namespace spot
private:
size_t size_;
size_t bvsize_;
char storage_[0];
};
/// @}
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment