From 9db750f407ceeb5c1fab99414b074d289bfda179 Mon Sep 17 00:00:00 2001 From: Boris Kolpackov Date: Wed, 11 Mar 2009 09:30:41 +0200 Subject: Add support for parsing/serialization of recursive types tests/cxx/hybrid/recursive/: new test --- libxsde/xsde/cxx/stack.ixx | 86 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 86 insertions(+) create mode 100644 libxsde/xsde/cxx/stack.ixx (limited to 'libxsde/xsde/cxx/stack.ixx') diff --git a/libxsde/xsde/cxx/stack.ixx b/libxsde/xsde/cxx/stack.ixx new file mode 100644 index 0000000..b0e81ff --- /dev/null +++ b/libxsde/xsde/cxx/stack.ixx @@ -0,0 +1,86 @@ +// file : xsde/cxx/stack.ixx +// author : Boris Kolpackov +// copyright : Copyright (c) 2005-2009 Code Synthesis Tools CC +// license : GNU GPL v2 + exceptions; see accompanying LICENSE file + +namespace xsde +{ + namespace cxx + { + inline stack:: + ~stack () + { + delete[] data_; + } + + inline stack:: + stack (size_t el_size, void* first_el) + : el_size_ (el_size), + first_ (first_el), + data_ (0), + size_ (0), + capacity_ (0) + { + } + + inline void stack:: + pop () + { + --size_; + } + +#ifdef XSDE_EXCEPTIONS + inline void stack:: +#else + inline stack::error stack:: +#endif + push () + { + if (size_ > capacity_) + { +#ifdef XSDE_EXCEPTIONS + grow (); +#else + if (error e = grow ()) + return e; +#endif + } + + ++size_; + +#ifndef XSDE_EXCEPTIONS + return error_none; +#endif + } + + inline void* stack:: + top () + { + return size_ == 1 ? first_ : data_ + (size_ - 1) * el_size_; + } + + inline void stack:: + clear () + { + size_ = 0; + } + + inline bool stack:: + empty () const + { + return size_ == 0; + } + + inline size_t stack:: + size () const + { + return size_; + } + + inline size_t stack:: + element_size () const + { + return el_size_; + } + } +} -- cgit v1.1