Fix nasty infinite-loop bug in Buffer:sendCollection
[supercollider.git] / external_libraries / yaml-cpp-0.2.6 / src / ptr_stack.h
blobb2a88e628a06ec63e9ef52d9c8887b4d561b269c
1 #ifndef PTR_STACK_H_62B23520_7C8E_11DE_8A39_0800200C9A66
2 #define PTR_STACK_H_62B23520_7C8E_11DE_8A39_0800200C9A66
4 #if !defined(__GNUC__) || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4) || (__GNUC__ >= 4) // GCC supports "pragma once" correctly since 3.4
5 #pragma once
6 #endif
8 #include "yaml-cpp/noncopyable.h"
9 #include <memory>
10 #include <vector>
11 #include <cstddef>
13 template <typename T>
14 class ptr_stack: private YAML::noncopyable
16 public:
17 ptr_stack() {}
18 ~ptr_stack() { clear(); }
20 void clear() {
21 for(unsigned i=0;i<m_data.size();i++)
22 delete m_data[i];
23 m_data.clear();
26 std::size_t size() const { return m_data.size(); }
27 bool empty() const { return m_data.empty(); }
29 void push(std::auto_ptr<T> t) {
30 m_data.push_back(NULL);
31 m_data.back() = t.release();
33 std::auto_ptr<T> pop() {
34 std::auto_ptr<T> t(m_data.back());
35 m_data.pop_back();
36 return t;
38 T& top() { return *m_data.back(); }
39 const T& top() const { return *m_data.back(); }
41 private:
42 std::vector<T*> m_data;
45 #endif // PTR_STACK_H_62B23520_7C8E_11DE_8A39_0800200C9A66