diff options
Diffstat (limited to 'libxsde')
-rw-r--r-- | libxsde/xsde/cxx/stack.hxx | 2 | ||||
-rw-r--r-- | libxsde/xsde/cxx/stack.ixx | 10 |
2 files changed, 8 insertions, 4 deletions
diff --git a/libxsde/xsde/cxx/stack.hxx b/libxsde/xsde/cxx/stack.hxx index a8f26f2..5a947df 100644 --- a/libxsde/xsde/cxx/stack.hxx +++ b/libxsde/xsde/cxx/stack.hxx @@ -82,7 +82,7 @@ namespace xsde { block* prev; block* next; - char data[0]; // Sufficiently padded (2 * sizeof(void*)). + //char data[0]; Sufficiently padded (2 * sizeof(void*)). }; size_t el_size_; // Element size in bytes. diff --git a/libxsde/xsde/cxx/stack.ixx b/libxsde/xsde/cxx/stack.ixx index 1f947df..d0544db 100644 --- a/libxsde/xsde/cxx/stack.ixx +++ b/libxsde/xsde/cxx/stack.ixx @@ -70,9 +70,13 @@ namespace xsde inline void* stack:: top () { - return cap_ == 1 - ? static_cast<void*> (cur_) - : static_cast<void*> (cur_->data + (num_ - 1) * el_size_); + if (cap_ == 1) + return cur_; + else + { + char* data = reinterpret_cast<char*> (cur_) + sizeof (block); + return data + (num_ - 1) * el_size_; + } } inline void stack:: |