20#ifndef FASTCDR_UTILS_FIXED_SIZE_STRING_HPP_
21#define FASTCDR_UTILS_FIXED_SIZE_STRING_HPP_
27#define MEMCCPY _memccpy
29#define MEMCCPY memccpy
43template <
size_t MAX_CHARS>
54 memset(string_data, 0,
sizeof(string_data));
67 size_t n_chars)
noexcept
80 size_t n_chars)
noexcept
82 string_len = (
nullptr == c_array) ? 0 :
83 (MAX_CHARS < n_chars) ? MAX_CHARS : n_chars;
86 memcpy(string_data, c_array, string_len);
96 const char* c_string) noexcept
99 set(c_string !=
nullptr ? c_string :
"");
108 const char* c_string)
noexcept
110 set(c_string !=
nullptr ? c_string :
"");
119 const std::string& str) noexcept
131 const std::string& str)
noexcept
164 return std::string(string_data);
173 const char* rhs)
const noexcept
175 return strncmp(string_data, rhs, MAX_CHARS) == 0;
184 const std::string& rhs)
const noexcept
186 return strncmp(string_data, rhs.c_str(), MAX_CHARS) == 0;
197 return strncmp(string_data, rhs.c_str(), MAX_CHARS) == 0;
206 const char* rhs)
const noexcept
208 return !(*
this == rhs);
217 const std::string& rhs)
const noexcept
219 return !(*
this == rhs);
230 return !(*
this == rhs);
261 const std::string& rhs)
const noexcept
272 const std::string& rhs)
const noexcept
280 operator const char* ()
const noexcept {
299 const char* str)
const noexcept
301 return strncmp(string_data, str, MAX_CHARS);
310 const std::string& str)
const noexcept
312 return strncmp(string_data, str.c_str(), MAX_CHARS);
323 return strncmp(string_data, str.c_str(), MAX_CHARS);
329 const char* c_string)
noexcept
331 char* result =
static_cast<char*
>(MEMCCPY(string_data, c_string,
'\0', MAX_CHARS));
332 string_len = (result ==
nullptr) ? MAX_CHARS : static_cast<size_t>(result - string_data) - 1u;
335 char string_data[MAX_CHARS + 1];
Template class for non-alloc strings.
Definition fixed_size_string.hpp:45
fixed_string & operator=(const char *c_string) noexcept
Assigns from a C string.
Definition fixed_size_string.hpp:107
fixed_string() noexcept
Default constructor.
Definition fixed_size_string.hpp:52
size_t size() const noexcept
Returns the size of the string.
Definition fixed_size_string.hpp:288
fixed_string(const std::string &str) noexcept
Constructs from a std::string.
Definition fixed_size_string.hpp:118
bool operator==(const char *rhs) const noexcept
Compares equality with a C string.
Definition fixed_size_string.hpp:172
static constexpr size_t max_size
Maximum number of characters.
Definition fixed_size_string.hpp:49
int compare(const std::string &str) const noexcept
Compares with a std::string.
Definition fixed_size_string.hpp:309
std::string to_string() const
Converts to std::string.
Definition fixed_size_string.hpp:162
fixed_string(const char *c_array, size_t n_chars) noexcept
Constructs from a char array.
Definition fixed_size_string.hpp:65
const char * c_str() const noexcept
Converts to C string.
Definition fixed_size_string.hpp:153
fixed_string(const char *c_string) noexcept
Constructs from a C string.
Definition fixed_size_string.hpp:95
int compare(const fixed_string< N > &str) const noexcept
Compares with a fixed_string.
Definition fixed_size_string.hpp:320
bool operator>(const fixed_string< N > &rhs) const noexcept
Compares relational greater than with a fixed_string of any size.
Definition fixed_size_string.hpp:249
fixed_string & assign(const char *c_array, size_t n_chars) noexcept
Assigns from a char array.
Definition fixed_size_string.hpp:78
bool operator<(const fixed_string< N > &rhs) const noexcept
Compares relational less than with a fixed_string of any size.
Definition fixed_size_string.hpp:238
int compare(const char *str) const noexcept
Compares with a C string.
Definition fixed_size_string.hpp:298
bool operator!=(const char *rhs) const noexcept
Compares inequality with a C string.
Definition fixed_size_string.hpp:205