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.
This commit is contained in:
parent
52ce449bbc
commit
14570f62d0
2 changed files with 14 additions and 4 deletions
|
|
@ -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];
|
||||
};
|
||||
|
||||
/// @}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue