collectionstack.h 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839
  1. #ifndef COLLECTIONSTACK_H_62B23520_7C8E_11DE_8A39_0800200C9A66
  2. #define COLLECTIONSTACK_H_62B23520_7C8E_11DE_8A39_0800200C9A66
  3. #if defined(_MSC_VER) || \
  4. (defined(__GNUC__) && (__GNUC__ == 3 && __GNUC_MINOR__ >= 4) || \
  5. (__GNUC__ >= 4)) // GCC supports "pragma once" correctly since 3.4
  6. #pragma once
  7. #endif
  8. #include <stack>
  9. #include <cassert>
  10. namespace YAML {
  11. struct CollectionType {
  12. enum value { NoCollection, BlockMap, BlockSeq, FlowMap, FlowSeq, CompactMap };
  13. };
  14. class CollectionStack {
  15. public:
  16. CollectionType::value GetCurCollectionType() const {
  17. if (collectionStack.empty())
  18. return CollectionType::NoCollection;
  19. return collectionStack.top();
  20. }
  21. void PushCollectionType(CollectionType::value type) {
  22. collectionStack.push(type);
  23. }
  24. void PopCollectionType(CollectionType::value type) {
  25. assert(type == GetCurCollectionType());
  26. collectionStack.pop();
  27. }
  28. private:
  29. std::stack<CollectionType::value> collectionStack;
  30. };
  31. }
  32. #endif // COLLECTIONSTACK_H_62B23520_7C8E_11DE_8A39_0800200C9A66