PLCnext API Documentation 23.6.0.37
ArrayDimensions.hpp
1
2//
3// Copyright PHOENIX CONTACT Electronics GmbH
4//
6#pragma once
8#include "Arp/Plc/Commons/Meta/ArrayDimension.hpp"
9#include <vector>
10#include <algorithm>
11#include <initializer_list>
12
13namespace Arp { namespace Plc { namespace Commons { namespace Meta
14{
15
18{
19 friend class ArrayNavigator;
20
21public: // typedefs
22 using Values = std::vector<ArrayDimension>;
23
24public: // construction/destruction
26 ArrayDimensions(void) = default;
28 explicit ArrayDimensions(size_t count);
30 ArrayDimensions(const ArrayDimension& entry);
32 ArrayDimensions(const Values& values);
34 ArrayDimensions(const std::initializer_list<int>& dimensions);
36 ArrayDimensions(const std::initializer_list<ArrayDimension>& entries);
38 ArrayDimensions(const ArrayDimensions& arg) = default;
46 ~ArrayDimensions(void) = default;
47
48public: // static properties
49 static const ArrayDimensions Empty;
50
51public: // operators
52 ArrayDimension& operator[](size_t index);
53 const ArrayDimension& operator[](size_t index)const;
54
55public: // setter/getter operations
56 bool IsEmpty(void)const;
57
60 size_t GetCount(void)const;
61 const Values& GetValues(void)const;
62
65 size_t GetCacheSize(void)const;
66
69 size_t GetDimensionsProduct(void)const;
70
71public: // operations
72 void Append(const ArrayDimension& dimension);
73
74protected: // setter/getter operations
75 void EraseFrontDimension(void);
76
77private: // fields
78 Values values;
79};
80
82// inline methods of class ArrayDimensions
84 : values(count)
85{
86}
87
89 : values(1, entry)
90{
91}
92
93inline ArrayDimensions::ArrayDimensions(const Values& values)
94 : values(values)
95{
96}
97
98inline ArrayDimension& ArrayDimensions::operator[](size_t index)
99{
100 return this->values[index];
101}
102
103inline const ArrayDimension& ArrayDimensions::operator[](size_t index)const
104{
105 return this->values[index];
106}
107
108inline bool ArrayDimensions::IsEmpty()const
109{
110 return this->values.empty();
111}
112
113inline size_t ArrayDimensions::GetCount()const
114{
115 return this->values.size();
116}
117
118inline const ArrayDimensions::Values& ArrayDimensions::GetValues()const
119{
120 return this->values;
121}
122
123inline void ArrayDimensions::EraseFrontDimension(void)
124{
125 if (this->values.size() > 0)
126 {
127 this->values.erase(this->values.begin());
128 }
129}
130
131inline void ArrayDimensions::Append(const ArrayDimension& dimension)
132{
133 this->values.push_back(dimension);
134}
135
136inline size_t ArrayDimensions::GetCacheSize(void)const
137{
138 return this->values.size() * ArrayDimension::GetCacheSize();
139}
140
141inline bool operator==(const ArrayDimensions& lhs, const ArrayDimensions& rhs)
142{
143 return (lhs.GetCount() == rhs.GetCount()) &&
144 std::equal(lhs.GetValues().begin(), lhs.GetValues().end(), rhs.GetValues().begin());
145}
146
147inline bool operator!= (const ArrayDimensions& lhs, const ArrayDimensions& rhs)
148{
149 return !(lhs == rhs);
150}
151
152inline std::ostream& operator<<(std::ostream& os, const ArrayDimensions& rhs)
153{
154 if (rhs.GetCount() == 0)
155 {
156 os << "{}";
157 }
158 else
159 {
160 os << "{" << rhs[0];
161 const auto count = rhs.GetCount();
162 for (size_t i = 1; i < count; ++i)
163 {
164 os << ";" << rhs[i];
165 }
166 os << "}";
167 }
168 return os;
169}
170
171}}}} // end of namespace Arp::Plc::Commons::Meta
172
Provide array information.
Definition: ArrayDimension.hpp:21
static size_t GetCacheSize(void)
Get the cache size
Definition: ArrayDimension.hpp:92
Provide array information.
Definition: ArrayDimensions.hpp:18
ArrayDimensions(const ArrayDimensions &arg)=default
Copy constructor.
ArrayDimensions & operator=(const ArrayDimensions &arg)=default
Copy assignment operator.
size_t GetCacheSize(void) const
Get the cache size
Definition: ArrayDimensions.hpp:136
size_t GetCount(void) const
Get the number of array dimensions for this vector element.
Definition: ArrayDimensions.hpp:113
~ArrayDimensions(void)=default
Destructs this instance and frees all resources.
ArrayDimensions(void)=default
Constructs an ArrayDimension instance.
ArrayDimensions(const std::initializer_list< int > &dimensions)
Constructs an ArrayDimension instance.
ArrayDimensions(const std::initializer_list< ArrayDimension > &entries)
Constructs an ArrayDimension instance.
ArrayDimensions & operator=(ArrayDimensions &&arg)=default
Move assignment operator.
ArrayDimensions(ArrayDimensions &&arg)=default
Move constructor.
size_t GetDimensionsProduct(void) const
Gets the element count total.
std::ostream & operator<<(std::ostream &os, const BasicString< CharType, Alloc > &right)
Streams the right string to the outstream os .
Definition: BasicString.hxx:1731
bool operator!=(const BasicString< CharType, Alloc > &left, const BasicString< CharType, Alloc > &right)
Compares the left string to the right string on inequality.
Definition: BasicString.hxx:1935
bool operator==(const BasicString< CharType, Alloc > &left, const BasicString< CharType, Alloc > &right)
Compares the left string to the right string on equality.
Definition: BasicString.hxx:1899
Root namespace for the PLCnext API