Website Summary Files Commits Branches @commit @diff @stats
path: root / src / dstack.hpp
diff options
context:
space:
mode:
Commit6e19bb560d474736d45f5be011ff0830c7019991 (patch)
Author
 Dimitar Trendafilov <dimitar@coherent-labs.com>
2018-11-05 23:34:00 +0200
Committer
 Dimitar Trendafilov <dimitar@coherent-labs.com>
2018-11-05 23:34:00 +0200
Files42d29cf1c4e6a535ba526f434debaac3a70df2c6 /src/dstack.hpp
IPL-6e19bb560d474736d45f5be011ff0830c7019991.tar
IPL-6e19bb560d474736d45f5be011ff0830c7019991.tar.gz
IPL-6e19bb560d474736d45f5be011ff0830c7019991.zip
Squashed 'spasm/' content from commit 08ee95d
git-subtree-dir: spasm git-subtree-split: 08ee95d89054ba0d33697d613799a0a013aedf89
1 files changed, 46 insertions, 0 deletions
-rw-r--r--src/dstack.hpp46
diff --git a/src/dstack.hpp b/src/dstack.hpp
new file mode 100644
index 0000000..850b66b
--- /dev/null
+++ b/src/dstack.hpp
@@ -0,0 +1,46 @@
+#ifndef DSTACK_HPP
+#define DSTACK_HPP
+
+#include "types.hpp"
+
+namespace SpasmImpl
+{
+//! class representing the data stack
+
+/*! The class is quite simple stack. It is byte-orientatied - every push
+** and pop is done in bytes with no taking care of any byte order!
+*/
+class Dstack
+{
+ public:
+ Dstack();
+ Dstack(const Dstack&);
+ Dstack& operator=(const Dstack&);
+ ~Dstack();
+ void push(data_t);
+ void push(byte*, size_t);
+ void pop(void*, size_t);
+ data_t pop();
+ data_t top() const;
+
+ void reserve(size_t);
+ void strip_memory();
+ size_t size() const;
+ size_t reserved() const;
+ bool empty() const;
+
+ private:
+ void copy_dstack(const Dstack&);
+
+ //! pointer to the bottom of the stack
+ byte* bottom;
+
+ //! pointer to the top of the stack
+ byte* tos;
+
+ //! size of the stack in bytes
+ size_t s_size;
+};
+} // namespace SpasmImpl
+
+#endif // #ifndef DSTACK_HPP