Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #pragma once
- #include <cstdint>
- #include <iterator>
- #include <string>
- #include <vector>
- #include "adsDataCursor.h"
- using adsDataCursor::DatatypeId;
- class AdsVarData;
- class AdsData
- {
- public:
- using SizeType = std::uint32_t;
- class SymbolInfo;
- class SubSymbolInfo;
- class DatatypeInfo;
- class ArrayInfo;
- class iterator;
- using const_iterator = iterator;
- AdsData() noexcept;
- AdsData(const std::vector<char>& symData, const std::vector<char>& dtData);
- AdsData(const AdsData&) = delete;
- AdsData& operator=(const AdsData&) = delete;
- AdsData(AdsData&&) noexcept;
- AdsData& operator=(AdsData&&) noexcept;
- ~AdsData() noexcept;
- AdsVarData maybe(std::string_view name) const;
- AdsVarData operator[](std::string_view name) const;
- iterator begin() const noexcept;
- iterator end() const noexcept;
- iterator cbegin() const noexcept;
- iterator cend() const noexcept;
- private:
- std::vector<SymbolInfo> symbols_;
- std::vector<DatatypeInfo> types_;
- };
- class AdsVarData
- {
- public:
- using SizeType = AdsData::SizeType;
- class iterator;
- using const_iterator = iterator;
- std::string name(std::string prefix) const;
- std::string shortName() const;
- const std::string& type() const noexcept;
- DatatypeId typeId() const noexcept;
- SizeType group() const noexcept;
- SizeType offset() const noexcept;
- SizeType size() const noexcept;
- bool isPointer() const noexcept;
- bool isReference() const noexcept;
- bool isStatic() const noexcept;
- bool empty() const noexcept;
- SizeType subElements() const noexcept;
- AdsVarData deref(SizeType address) const;
- AdsVarData maybe(std::string_view name) const;
- AdsVarData operator[](std::string_view name) const;
- iterator begin() const noexcept;
- iterator end() const noexcept;
- iterator cbegin() const noexcept;
- iterator cend() const noexcept;
- bool good() const noexcept;
- explicit operator bool() const noexcept;
- private:
- AdsVarData() noexcept;
- AdsVarData(const AdsData::SubSymbolInfo* info, SizeType group, SizeType offset, SizeType index);
- const AdsData::SubSymbolInfo* info_;
- SizeType group_;
- SizeType offset_;
- SizeType index_;
- friend class AdsData;
- friend class AdsData::iterator;
- };
- class AdsData::iterator
- {
- public:
- using value_type = AdsVarData;
- using reference = AdsVarData;
- using pointer = AdsVarData;
- using difference_type = std::ptrdiff_t;
- using iterator_category = std::input_iterator_tag;
- reference operator*() const noexcept;
- pointer operator->() const noexcept;
- friend bool operator==(iterator lhs, iterator rhs) noexcept;
- friend bool operator!=(iterator lhs, iterator rhs) noexcept;
- iterator& operator++() noexcept;
- iterator operator++(int) noexcept;
- private:
- explicit iterator(std::vector<AdsData::SymbolInfo>::const_iterator it) noexcept;
- std::vector<AdsData::SymbolInfo>::const_iterator iter_;
- friend class AdsData;
- };
- class AdsVarData::iterator
- {
- public:
- using value_type = AdsVarData;
- using reference = AdsVarData;
- using pointer = AdsVarData;
- using difference_type = std::ptrdiff_t;
- using iterator_category = std::input_iterator_tag;
- reference operator*() const noexcept;
- pointer operator->() const noexcept;
- friend bool operator==(const iterator& lhs, const iterator& rhs) noexcept;
- friend bool operator!=(const iterator& lhs, const iterator& rhs) noexcept;
- iterator& operator++() noexcept;
- iterator operator++(int) noexcept;
- private:
- explicit iterator(const AdsData::SubSymbolInfo* info, SizeType group, SizeType offset, SizeType index) noexcept;
- const AdsData::SubSymbolInfo* info_;
- SizeType group_;
- SizeType offset_;
- SizeType index_;
- friend class AdsVarData;
- };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement