Newer
Older
#ifndef ECSS_SERVICES_ETL_STRING_HPP
#define ECSS_SERVICES_ETL_STRING_HPP
#include <cstddef>
/**
* A fixed-size string
*
* This class implements a string (i.e. an array of bytes) that has a maximum size (\p MAX_SIZE)
* known at compile time. As such, we can predict how much space the string will take, and prevent
* memory issues.
*
* Even though the maximum size (capacity) of the script should be specified beforehand, the size
* of the actual content is variable, and can be accessed quickly using the `String::size()`
* function.
*
* This class is a child of etl::string that provides some extra functionality that might be
* useful to us. For the full documentation, look at https://www.etlcpp.com/string.html
*
* Strings defined using the String class <b>do NOT have a null-terminating byte</b>
*
* @tparam MAX_SIZE The maximum size of the strings
*/
template <const size_t MAX_SIZE>
class String : public etl::string<MAX_SIZE> {
public:
/**
* String constructor from a uint8_t array, with a length equal to \p MAX_SIZE
*
* The array does NOT need to be null-terminated.
*
* @param data The array of uint8_t data
*/
String(const uint8_t* data) // NOLINTNEXTLINE(google-explicit-constructor)
: etl::string<MAX_SIZE>(reinterpret_cast<const char*>(data), MAX_SIZE) {}
/**
* String constructor from a uint8_t array
*
* The array does NOT need to be null-terminated.
*
* @param data The array of uint8_t data
* @param count The number of bytes to include
*/
String(const uint8_t* data, size_t count) : etl::string<MAX_SIZE>(reinterpret_cast<const char*>(data), count) {}
/**
* Declaration of the constructor from const char*s that calls the parent constructor
*
* This is required for some reason, so that C++ recognises and converts string literals
* automatically
*
* @param text The pointer to a null terminated string
*
*/
String(const char* text) // NOLINTNEXTLINE(google-explicit-constructor)
using etl::istring::append; // Use the append function from the parent
/**
* Append a specified number of bytes from a uint8_t array to the String
* @details The array does NOT need to be null-terminated
* @param data The characters to append
* @param n The number of characters that \p data contains
* @return This string
*/
String& append(const uint8_t* data, size_t n) {
etl::string<MAX_SIZE>::append(reinterpret_cast<const char*>(data), n);
return *this;
}
#endif // ECSS_SERVICES_ETL_STRING_HPP