PLCnext API Documentation 25.0.2.69
RscString.hxx
1
2//
3// Copyright Phoenix Contact GmbH & Co. KG
4//
6#pragma once
8#include "Arp/Base/Core/SecureString.hpp"
9#include "Arp/Base/Rsc/Commons/RscStringBase.hpp"
10#include "Arp/Base/Commons/Exceptions/ArgumentException.hpp"
11#include <cstring>
12#include <array>
13
14namespace Arp::Base::Rsc::Commons
15{
16
22template<int N>
24{
25public: // construction
26 RscString(void);
27 RscString(const char* pChars); // no explicit here, implicit conversion is desired
28 RscString(const char8u* pChars); // no explicit here, implicit conversion is desired
29 RscString(const String& arg); // no explicit here, implicit conversion is desired
30
31 // canonical construction/assignment/destruction
32 RscString(const RscString& arg);
33 RscString(RscString&& arg)noexcept;
35 RscString& operator=(RscString&& arg)noexcept;
37
38public: // operators
39 RscString& operator=(const char* pChars);
40 RscString& operator=(const char8u* pChars);
42
43public: // getter operations
44 static constexpr size_t GetMaxLength(void);
45
46protected: // operations
47 explicit RscString(RscType stringType);
48
49private: // static fields
50 const static size_t maxLength = N;
51 const static size_t bufferSize = maxLength + 1;
52
53private: // fields
54 std::array<char, bufferSize> buffer{}; // default initialized by zeros
55};
56
58// inline methods of class RscString<N>
59
61template<int N>
63 : RscStringBase(RscType::String)
64{
65 RscStringBase::SetBufferInfo(this->buffer.data(), bufferSize);
66}
67
70template<int N>
71inline RscString<N>::RscString(RscType stringType)
72 : RscStringBase(stringType)
73{
74 RscStringBase::SetBufferInfo(this->buffer.data(), bufferSize);
75}
76
79template<int N>
81 : RscStringBase(arg)
82 , buffer(arg.buffer)
83{
84 RscStringBase::SetBufferInfo(this->buffer.data(), bufferSize, arg.GetLength());
85}
86
89template<int N>
91 : RscStringBase(arg)
92 , buffer(arg.buffer)
93{
94 RscStringBase::SetBufferInfo(this->buffer.data(), bufferSize, arg.GetLength());
95}
96
100template<int N>
102{
103 this->buffer = arg.buffer;
104 RscStringBase::SetStringType(this->GetStringType());
105 RscStringBase::SetBufferInfo(this->buffer.data(), bufferSize, arg.GetLength());
106 return *this;
107}
108
112template<int N>
114{
115 this->buffer = arg.buffer;
116 RscStringBase::SetStringType(this->GetStringType());
117 RscStringBase::SetBufferInfo(this->buffer.data(), bufferSize, arg.GetLength());
118 return *this;
119}
120
122template<int N>
123inline RscString<N>::~RscString(void) = default;
124
129template<int N>
130inline RscString<N>::RscString(const char* pChars)
131 : RscStringBase(RscType::String)
132{
133 RscStringBase::SetBufferInfo(this->buffer.data(), bufferSize, pChars);
134}
135
140template<int N>
141inline RscString<N>::RscString(const char8u* pChars)
142 : RscString(reinterpret_cast<const char*>(pChars))
143{
144}
145
148template<int N>
150 : RscStringBase(RscType::String)
151{
152 RscStringBase::SetBufferInfo(this->buffer.data(), bufferSize, arg.CStr());
153}
154
157template<int N>
158inline constexpr size_t RscString<N>::GetMaxLength()
159{
160 return maxLength;
161}
162
166template<int N>
167inline RscString<N>& RscString<N>::operator=(const char* pChars)
168{
169 this->Assign(pChars);
170 return *this;
171}
172
176template<int N>
178{
179 this->Assign(reinterpret_cast<const char*>(pChars));
180 return *this;
181}
182
186template<int N>
188{
189 this->Assign(str.CStr(), str.Length());
190 return *this;
191}
192
197template<int N>
198inline std::ostream& operator<<(std::ostream& os, const RscString<N>& rhs)
199{
200 os << rhs.CStr();
201 return os;
202}
203
204} // end of namespace Arp::Base::Rsc::Commons
205
207// template specialization of RscString<N> formatter
208template<int N>
209struct fmt::formatter<Arp::Base::Rsc::Commons::RscString<N>> : public fmt::ostream_formatter {};
This class represents the Arp String. The implementation is based on std::string.
Definition: String.hpp:39
size_type Length(void) const
Returns the number of char elements in this string.
Definition: String.ipp:954
const CharType * CStr(void) const
Gets the character data of this string.
Definition: String.ipp:1395
This class is a base class of template class RscString.
Definition: RscStringBase.hpp:27
void SetStringType(RscType value)
Sets the string type of this instance.
Definition: RscStringBase.cpp:171
size_t GetLength(void) const
Gets the length of this string.
Definition: RscStringBase.cpp:49
const char * CStr(void) const
Returns a const char pointer to the internal string buffer.
Definition: RscStringBase.cpp:63
void SetBufferInfo(char *pStringBuffer, size_t bufferSize, size_t strLength=0)
Constructs an empty RscStringBase instance.
Definition: RscStringBase.cpp:93
Contains a static string with string lentgh up to N characters. The string shall be null terminated.
Definition: RscString.hxx:24
RscString(const char *pChars)
Constructs an RscString instance and copies the null terminated c-string in internal buffer.
Definition: RscString.hxx:130
RscString(const RscString &arg)
Default copy constructor.
Definition: RscString.hxx:80
RscString(const char8u *pChars)
Constructs an RscString instance and copies the null terminated c-string in internal buffer.
Definition: RscString.hxx:141
RscString & operator=(const RscString &arg)
Default copy-assignment operator.
Definition: RscString.hxx:101
RscString(void)
Constructs an empty RscString.
Definition: RscString.hxx:62
RscString & operator=(const char8u *pChars)
Assigns the UTF8 char buffer to this instance.
Definition: RscString.hxx:177
RscString & operator=(const String &str)
Assigns the String to this instance.
Definition: RscString.hxx:187
static constexpr size_t GetMaxLength(void)
Get the maximal string length of this instance excluding string terminator.
Definition: RscString.hxx:158
RscString & operator=(const char *pChars)
Assigns the char buffer to this instance.
Definition: RscString.hxx:167
RscString(RscType stringType)
Constructor for type < see cref="RscSecureString"/>.
Definition: RscString.hxx:71
RscString & operator=(RscString &&arg) noexcept
Default move-assignment operator.
Definition: RscString.hxx:113
~RscString(void)
Default destructor.
RscString(RscString &&arg) noexcept
Default move constructor.
Definition: RscString.hxx:90
RscString(const String &arg)
Constructor for type String.
Definition: RscString.hxx:149
char8_t char8u
The Arp UTF8 character type of 1 byte size.
Definition: PrimitiveTypes.hpp:47
Root namespace for the PLCnext API