Guest User

Untitled

a guest
Apr 9th, 2018
31
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.87 KB | None | 0 0
  1. #pragma once
  2.  
  3. #include <cstdint>
  4. #include <iterator>
  5. #include <string>
  6. #include <vector>
  7.  
  8. #include "adsDataCursor.h"
  9.  
  10. using adsDataCursor::DatatypeId;
  11.  
  12. class AdsVarData;
  13.  
  14. class AdsData
  15. {
  16. public:
  17.     using SizeType = std::uint32_t;
  18.  
  19.     class SymbolInfo;
  20.     class SubSymbolInfo;
  21.     class DatatypeInfo;
  22.     class ArrayInfo;
  23.  
  24.     class iterator;
  25.     using const_iterator = iterator;
  26.  
  27.     AdsData() noexcept;
  28.     AdsData(const std::vector<char>& symData, const std::vector<char>& dtData);
  29.  
  30.     AdsData(const AdsData&) = delete;
  31.     AdsData& operator=(const AdsData&) = delete;
  32.  
  33.     AdsData(AdsData&&) noexcept;
  34.     AdsData& operator=(AdsData&&) noexcept;
  35.  
  36.     ~AdsData() noexcept;
  37.  
  38.     AdsVarData operator[](std::string_view name) const;
  39.  
  40.     iterator begin() const noexcept;
  41.     iterator end() const noexcept;
  42.     iterator cbegin() const noexcept;
  43.     iterator cend() const noexcept;
  44.  
  45. private:
  46.     std::vector<SymbolInfo>   symbols_;
  47.     std::vector<DatatypeInfo> types_;
  48. };
  49.  
  50. class AdsVarData
  51. {
  52. public:
  53.     using SizeType = AdsData::SizeType;
  54.     class iterator;
  55.     using const_iterator = iterator;
  56.  
  57.     std::string        name(std::string prefix) const;
  58.     std::string        shortName() const;
  59.     const std::string& type() const noexcept;
  60.     const std::string& comment() const noexcept;
  61.     DatatypeId         typeId() const noexcept;
  62.     SizeType           group() const noexcept;
  63.     SizeType           offset() const noexcept;
  64.     SizeType           size() const noexcept;
  65.  
  66.     bool isPointer() const noexcept;
  67.     bool isReference() const noexcept;
  68.  
  69.     bool isStatic() const noexcept;
  70.  
  71.     bool empty() const noexcept;
  72.  
  73.     SizeType subElements() const noexcept;
  74.  
  75.     iterator begin() const noexcept;
  76.     iterator end() const noexcept;
  77.     iterator cbegin() const noexcept;
  78.     iterator cend() const noexcept;
  79.  
  80. private:
  81.     AdsVarData(const AdsData::SubSymbolInfo* info, SizeType group, SizeType offset, SizeType index);
  82.     const AdsData::SubSymbolInfo* info_;
  83.     SizeType                      group_;
  84.     SizeType                      offset_;
  85.     SizeType                      index_;
  86.  
  87.     friend class AdsData;
  88.     friend class AdsData::iterator;
  89. };
  90.  
  91. class AdsData::iterator
  92. {
  93. public:
  94.     using value_type        = AdsVarData;
  95.     using reference         = AdsVarData;
  96.     using pointer           = AdsVarData;
  97.     using difference_type   = std::ptrdiff_t;
  98.     using iterator_category = std::input_iterator_tag;
  99.  
  100.     reference operator*() const noexcept;
  101.     pointer   operator->() const noexcept;
  102.  
  103.     friend bool operator==(iterator lhs, iterator rhs) noexcept;
  104.     friend bool operator!=(iterator lhs, iterator rhs) noexcept;
  105.  
  106.     iterator& operator++() noexcept;
  107.     iterator  operator++(int) noexcept;
  108.  
  109. private:
  110.     explicit iterator(std::vector<AdsData::SymbolInfo>::const_iterator it) noexcept;
  111.     std::vector<AdsData::SymbolInfo>::const_iterator iter_;
  112.  
  113.     friend class AdsData;
  114. };
  115.  
  116. class AdsVarData::iterator
  117. {
  118. public:
  119.     using value_type        = AdsVarData;
  120.     using reference         = AdsVarData;
  121.     using pointer           = AdsVarData;
  122.     using difference_type   = std::ptrdiff_t;
  123.     using iterator_category = std::input_iterator_tag;
  124.  
  125.     reference operator*() const noexcept;
  126.     pointer   operator->() const noexcept;
  127.  
  128.     friend bool operator==(const iterator& lhs, const iterator& rhs) noexcept;
  129.     friend bool operator!=(const iterator& lhs, const iterator& rhs) noexcept;
  130.  
  131.     iterator& operator++() noexcept;
  132.     iterator  operator++(int) noexcept;
  133.  
  134. private:
  135.     explicit iterator(const AdsData::SubSymbolInfo* info, SizeType group, SizeType offset, SizeType index) noexcept;
  136.     const AdsData::SubSymbolInfo* info_;
  137.     SizeType                      group_;
  138.     SizeType                      offset_;
  139.     SizeType                      index_;
  140.  
  141.     friend class AdsVarData;
  142. };
Add Comment
Please, Sign In to add comment