From 4540ed317b96eef9b5ad852a55951bf95bb49569 Mon Sep 17 00:00:00 2001 From: John Wellbelove Date: Sat, 11 Apr 2026 20:19:28 +0200 Subject: [PATCH] Added basic_format_spec --- docs/raw/IO/Debounce.png | Bin 35073 -> 0 bytes docs/raw/IO/io_port.txt | 210 --------- docs/raw/strings/basic_format_spec.txt | 211 --------- ...ing Utilities.txt => string_utilities.txt} | 0 docs/strings/_index.md | 34 ++ docs/strings/basic_format_spec.md | 410 ++++++++++++++++++ 6 files changed, 444 insertions(+), 421 deletions(-) delete mode 100644 docs/raw/IO/Debounce.png delete mode 100644 docs/raw/IO/io_port.txt delete mode 100644 docs/raw/strings/basic_format_spec.txt rename docs/raw/strings/{String Utilities.txt => string_utilities.txt} (100%) create mode 100644 docs/strings/basic_format_spec.md diff --git a/docs/raw/IO/Debounce.png b/docs/raw/IO/Debounce.png deleted file mode 100644 index bfc40a8ec417ae09046adb3c795ba98d919503da..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 35073 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 V#VB5CCZX@_jJlp$@ku-Ue*qCBJt_bI diff --git a/docs/raw/IO/io_port.txt b/docs/raw/IO/io_port.txt deleted file mode 100644 index 4a75edc1..00000000 --- a/docs/raw/IO/io_port.txt +++ /dev/null @@ -1,210 +0,0 @@ -io_port - ->= 20.39.0 -A set of templates for building interface classes to memory mapped hardware ports. -They avoid the need to directly map carefully packed (and possibly non-portable) structures onto memory addresses. - -Note: A read from a write-only, or write to a read-only port will result in a compile time error. - -Defines classes for the following IO types:- -Read / Write. -Read only. -Write only. -Write only with shadow register. - -With a shadow register, the value written is stored locally and may be read back. - -The port may either have an address fixed at compile time or set at runtime. The compile time versions require no extra overhead compared to a plain memory mapped structure. - -Ports may be sent as parameters to algorithms that expect iterators, except the runtime address version of io_port_wos, which must use the built-in iterator if the shadow value is to be correctly updated for writes. - -All classes define the following typedefs. - -T value_type -volatile T* pointer -volatile const T* const_pointer -volatile T& reference -volatile const T& const_reference - -Compile time port addresses -____________________________________________________________________________________________________ -io_port_rw -Read/write port. -io_port_rw -____________________________________________________________________________________________________ -iterator -const_iterator -____________________________________________________________________________________________________ -operator T() const -Read the value. Conversion operator to T. -____________________________________________________________________________________________________ -iterator iter() -Get an iterator to this port. -___________________________________________________________________________________________________ -const_iterator iter() const -const_iterator citer() const -Get a const_iterator to this port. -____________________________________________________________________________________________________ -T read() const -Read the value. -____________________________________________________________________________________________________ -void write(T value) -Write the value. -____________________________________________________________________________________________________ -io_port_rw& operator =(T value) -Write the value. -___________________________________________________________________________________________________ -pointer get_address() -const_pointer get_address() const -Gets the address of the port. -___________________________________________________________________________________________________ -io_port_rw& operator |=(value_type value) -Or-Equals operator. -___________________________________________________________________________________________________ -io_port_rw& operator &=(value_type value) -And-Equals operator. -___________________________________________________________________________________________________ -io_port_rw& operator ^=(value_type value) -Exclusive-Or-Equals operator. -___________________________________________________________________________________________________ -io_port_rw& operator <<=(int shift) -Left-Shift-Equals operator. -___________________________________________________________________________________________________ -io_port_rw& operator >>=(int shift) -Right-Shift-Equals operator. -___________________________________________________________________________________________________ -value_type operator ~() const -Not operator. -____________________________________________________________________________________________________ -io_port_ro -Read only port. -io_port_ro -____________________________________________________________________________________________________ -const_iterator -____________________________________________________________________________________________________ -operator T() const -Read the value. Conversion operator to T. -___________________________________________________________________________________________________ -const_iterator iter() const -const_iterator citer() const -Get a const_iterator to this port. -____________________________________________________________________________________________________ -T read() const -Read the value. -___________________________________________________________________________________________________ -const_pointer get_address() const -Gets the address of the port. -____________________________________________________________________________________________________ -io_port_wo -Write only port. -io_port_wo -____________________________________________________________________________________________________ -iterator -____________________________________________________________________________________________________ -iterator iter() -Get an iterator to this port. -____________________________________________________________________________________________________ -void write(T value) -Write the value. -____________________________________________________________________________________________________ -io_port_wo& operator =(T value) -Write the value. -___________________________________________________________________________________________________ -pointer get_address() -Gets the address of the port. -____________________________________________________________________________________________________ -io_port_wos -Write only port, with shadow register for reading. -io_port_wos -____________________________________________________________________________________________________ -iterator -const_iterator -____________________________________________________________________________________________________ -operator T() const -Read the value. Conversion operator to T. -____________________________________________________________________________________________________ -iterator iter() -Get an iterator to this port. -___________________________________________________________________________________________________ -const_iterator iter() const -const_iterator citer() const -Get a const_iterator to this port. -____________________________________________________________________________________________________ -T read() const -Read the value. -____________________________________________________________________________________________________ -void write(T value) -Write the value. -____________________________________________________________________________________________________ -io_port_rw& operator =(T value) -Write the value. -___________________________________________________________________________________________________ -pointer get_address() -const_pointer get_address() const -Gets the address of the port. -___________________________________________________________________________________________________ -io_port_rw& operator |=(value_type value) -Or-Equals operator. -___________________________________________________________________________________________________ -io_port_rw& operator &=(value_type value) -And-Equals operator. -___________________________________________________________________________________________________ -io_port_rw& operator ^=(value_type value) -Exclusive-Or-Equals operator. -___________________________________________________________________________________________________ -io_port_rw& operator <<=(int shift) -Left-Shift-Equals operator. -___________________________________________________________________________________________________ -io_port_rw& operator >>=(int shift) -Right-Shift-Equals operator. -___________________________________________________________________________________________________ -value_type operator ~() const -Not operator. -____________________________________________________________________________________________________ -Example serial port - -The example uses a port at a compile time address. - -rxdata is an 8 bit read only port. -txdata is an 8 bit write only port. -control is a 16 bit write only port, with shadow register. -status is a 16 bit read only port. It shares an address with control. -option is an 8 bit read/write port. - -template -struct serial_port -{ - etl::io_port_ro rxdata; // Read only rx data register. - etl::io_port_wo txdata; // Write only tx register. - etl::io_port_wos control; // Write only, with shadow, control register. - etl::io_port_ro status; // Read only status register. - etl::io_port_ro option; // Read/Write register. -}; - -serial_port<0x800> port; // A serial port at address 0x800 - -// Read Rx data -char data = port.rxdata; - -// Write Tx data -port.txdata = 'A'; - -// Compile error! txdata is write only. -data = port.txdata; - -// Write to the control register and read back what we wrote. -port.control = 0x1234; -uint16_t control = port.control; - -// Flip bit 3 of the control register. -port.control ^= 0x0080; - -// Read from the status register. -uint16_t status = port.status; - -// Copy data from a buffer to the Tx data port. -std::copy(txBuffer.begin(), txBuffer.end(), serial_port.txdata.iter()); - -// Copy data from the Rx data port to a buffer. -std::copy_n(serial_port.rxdata, serial_port.status, std::back_inserter(rxBuffer)); - diff --git a/docs/raw/strings/basic_format_spec.txt b/docs/raw/strings/basic_format_spec.txt deleted file mode 100644 index ffd61d69..00000000 --- a/docs/raw/strings/basic_format_spec.txt +++ /dev/null @@ -1,211 +0,0 @@ -basic_format_spec -format_spec -wformat_spec -u16format_spec -u32format_spec - -A template class and four typedefs that allow a specification for string formatting functions and streams. -It defines specifications for strings, bool, integrals, floating point and pointers. -Used in conjunction with etl::to_string and string streams - -The class stores the following specifications: -base The number base. Predefined settings for binary, octal, decimal and hex. -width The total minimum field width for the value's text representation. -precision The total number of decimal places. -upper_case If true then numerical digits for bases >10 are in upper case. -left_justified If true then the text representation is left justified with padding up to the field width on the right. -boolalpha If true then Boolean values are rendered as "true" and "false". -showbase If true then binary, octal and hex values are prefixed with the base tag. -fill Determines the character used for the padding for width. -____________________________________________________________________________________________________ -basic_format_spec - -template -class basic_format_spec -____________________________________________________________________________________________________ -basic_format_spec() -The default constructor. -Sets:- -base : 10 -width : 0 -precision : 0 -upper case : false -left justified : false -boolalpha : false -show base -fill : ' ' -____________________________________________________________________________________________________ -basic_format_spec& base(const uint32_t b) -Sets the base to b. -____________________________________________________________________________________________________ -basic_format_spec& binary() -Sets the base to binary. -____________________________________________________________________________________________________ -basic_format_spec& octal() -Sets the base to octal. -____________________________________________________________________________________________________ -basic_format_spec& hex() -Sets the base to hexadecimal. -____________________________________________________________________________________________________ -basic_format_spec& octal() -Sets the base to octal. -____________________________________________________________________________________________________ -uint32_t get_base() const -Returns the current setting for base. -____________________________________________________________________________________________________ -basic_format_spec& width(const uint32_t w) -Sets the width to w. -____________________________________________________________________________________________________ -uint32_t get_width() const -Returns the current width value. -____________________________________________________________________________________________________ -basic_format_spec& precision(const uint32_t p) -Sets the precision to p. -____________________________________________________________________________________________________ -uint32_t get_precision() const -Returns the current precision value. -____________________________________________________________________________________________________ -basic_format_spec& upper_case(const bool b) -Sets the upper case flag to b. -Only affects numerical output such as hexadecimal. -____________________________________________________________________________________________________ -bool is_upper_case() const -Returns true if the upper case flag is set. -____________________________________________________________________________________________________ -basic_format_spec& show_base(const bool b) -Sets the showbase flag to b. -Only affects binary and hexadecimal output. -____________________________________________________________________________________________________ -bool is_show_base() const -Returns true if the showbase flag is set. -____________________________________________________________________________________________________ -basic_format_spec& fill(const typename TString::value_type c) -Sets the fill character to c. -____________________________________________________________________________________________________ -typename TString::value_type get_fill() const -Returns the fill character. -____________________________________________________________________________________________________ -basic_format_spec& left() -Sets the left justified flag to true. -____________________________________________________________________________________________________ -bool is_left() const -Returns true if the left justified flag is set. -____________________________________________________________________________________________________ -basic_format_spec& right() - -Sets the left justified flag to false. -____________________________________________________________________________________________________ -bool is_right() const -Returns true if the left justified flag is clear. -____________________________________________________________________________________________________ -basic_format_spec& boolalpha(bool b) -Sets the bool alpha flag to b. -____________________________________________________________________________________________________ -bool is_boolalpha() const -Returns true if the bool alpha flag is set. -____________________________________________________________________________________________________ -Typedefs - -typedef etl::basic_format_spec format_spec; -typedef etl::basic_format_spec wformat_spec; -typedef etl::basic_format_spec u16format_spec; -typedef etl::basic_format_spec u32format_spec; -____________________________________________________________________________________________________ -Stream manipulators -These manipulators are used in conjunction with the ETL's string streams. -Streams may also use a format spec as a manipulator. - -setbase(uint32_t base) -Sets the base for numerical output to base. -____________________________________________________________________________________________________ -setw(uint32_t width) -Sets the format width to width. -____________________________________________________________________________________________________ -template -setfill(TChar fill) -Sets the fill character to fill. -____________________________________________________________________________________________________ -setprecision(uint32_t precision) -Sets the number of decimal places to precision. -____________________________________________________________________________________________________ -bin -Sets the base for numerical output to binary. -____________________________________________________________________________________________________ -oct -Sets the base for numerical output to octal. -____________________________________________________________________________________________________ -dec -Sets the base for numerical output to decimal. -____________________________________________________________________________________________________ -hex -Sets the base for numerical output to hexadecimal. -____________________________________________________________________________________________________ -left -Sets the alignment to left. -____________________________________________________________________________________________________ -right -Sets the alignment to right. -____________________________________________________________________________________________________ -boolalpha -Sets the boolalpha flag to true. -____________________________________________________________________________________________________ -noboolalpha -Sets the boolalpha flag to false. -____________________________________________________________________________________________________ -uppercase -Sets the uppercase flag to true. -____________________________________________________________________________________________________ -nouppercase -Sets the uppercase flag to false. -____________________________________________________________________________________________________ -showbase -Sets the showbase flag to true. -____________________________________________________________________________________________________ -noshowbase -Sets the showbase flag to false. -____________________________________________________________________________________________________ -Example (to_string) - -etl::format_spec format; - -// Format as a hex character, minimum fill width of 8, fill with zeros. -format.hex().width(8).fill('0'); - -etl::string<8> text; - -// 'text' is set to "00123456" -etl::to_string(1193046, text, format); - -// Format minimum fill width of 8, fill with space and three decimal digits. -format.width(8).fill(' ').precision(3); - -// 'text' is set to " 3.142" -etl::to_string(3.1415, text, format); -____________________________________________________________________________________________________ -Example (string_stream) - -etl::string<20> buffer; -etl::string_stream stream(buffer); - -// Manipulators -stream << etl::showbase - << etl::bin << 123456 << " " - << etl::oct << 123456 << " " - << etl::dec << 123456 << " " - << etl::hex << 123456; - -The generated string:- - -0b11110001001000000 0361100 123456 0x1e240 - -// Format spec -etl::format_spec format; -format.show_base(true).hex(); - -stream << format << 123456; - -The generated string:- - -0x1e240 - - diff --git a/docs/raw/strings/String Utilities.txt b/docs/raw/strings/string_utilities.txt similarity index 100% rename from docs/raw/strings/String Utilities.txt rename to docs/raw/strings/string_utilities.txt diff --git a/docs/strings/_index.md b/docs/strings/_index.md index 34e94330..15de8ffb 100644 --- a/docs/strings/_index.md +++ b/docs/strings/_index.md @@ -2,3 +2,37 @@ title: "Strings" weight: 100 --- + +## String + +The library defines a set of string templates that have been specially tailored for embedded systems. +They have a maximum capacity fixed at compile time and make no calls to `malloc`/`free` or `new`/`delete`0. +They are completely deterministic. +The ETL provides `etl::string`, `etl::wstring`, `etl::u16string` and `etl::u32string`. + +## String View + +The ETL defines string view classes that provide a lost cost view into a string. +The ETL provides `etl::string_view`, `etl::wstring_view`, `etl::u16string_view` and `etl::u32string_view`. + +## To String + +The ETL defines a utility to create strings according to a format. +The ETL provides `etl::to_string`, `etl::to_wstring`, `etl::to_u16string` and `etl::to_u32string`. + +## To Arithmetic + +The ETL defines a utility to convert strings to values. + +## String Stream + +The ETL defines string stream classes that stream values into a string. +The ETL provides `etl::string_stream`, `etl::wstring_stream`, `etl::u16string_stream`, and `etl::u32string_stream`. + +## String Utilities + +The ETL provides a set of string to examine and manipulate strings. + +## Format Specification + +A class is defined to format the output of `etl::to_string`, `etl::to_wstring`, `etl::to_u16string`, and `etl::to_u32string`. diff --git a/docs/strings/basic_format_spec.md b/docs/strings/basic_format_spec.md new file mode 100644 index 00000000..1be768ea --- /dev/null +++ b/docs/strings/basic_format_spec.md @@ -0,0 +1,410 @@ +--- +title: "basic_format_spec" +--- + +`format_spec` +`wformat_spec` +`u16format_spec` +`u32format_spec` + +A template class and four typedefs that allow a specification for string formatting functions and streams. +It defines specifications for strings, bool, integrals, floating point and pointers. +Used in conjunction with `etl::to_string` and string streams + +The class stores the following specifications: +| Specification | Description | +| -------------- | -------------------------------------------------------------------------- | +| base | The number base. Predefined settings for binary, octal, decimal and hex. | +| width | The total minimum field width for the value's text representation. | +| precision | The total number of decimal places. | +| upper_case | If true then numerical digits for bases >10 are in upper case. | +| left_justified | If true then the text representation is left justified with padding up to the field width on the right. | +| boolalpha | If true then Boolean values are rendered as "true" and "false". | +| showbase | If true then binary, octal and hex values are prefixed with the base tag. | +| fill | Determines the character used for the padding for width. | + +## basic_format_spec + +```cpp +template +class basic_format_spec +``` +--- + +```cpp +basic_format_spec() +``` +**Description** +The default constructor. +Sets:- +| Specification | Default | +| ---------------- | ------- | +| `base` | `10` | +| `width` | `0` | +| `precision` | `0` | +| `upper case` | `false` | +| `left justified` | `false` | +| `boolalpha` | `false` | +| `show base` | `false` | +| `fill` | `' '` | + +```cpp +basic_format_spec& base(const uint32_t b) +``` +**Description** +Sets the base to b. + +--- + +```cpp +basic_format_spec& binary() +``` +**Description** +Sets the base to binary. + +--- + +```cpp +basic_format_spec& octal() +``` +**Description** +Sets the base to octal. + +--- + +```cpp +basic_format_spec& hex() +``` +**Description** +Sets the base to hexadecimal. + +--- + +```cpp +basic_format_spec& octal() +``` +**Description** +Sets the base to octal. + +--- + +```cpp +uint32_t get_base() const +``` +**Description** +Returns the current setting for base. + +--- + +```cpp +basic_format_spec& width(const uint32_t w) +``` +**Description** +Sets the width to `w`. + +--- + +```cpp +uint32_t get_width() const +``` +**Description** +Returns the current width value. + +--- + +```cpp +basic_format_spec& precision(const uint32_t p) +``` +**Description** +Sets the precision to `p`. + +```cpp +uint32_t get_precision() const +``` +**Description** +Returns the current precision value. + +--- + +```cpp +basic_format_spec& upper_case(const bool b) +``` +**Description** +Sets the upper case flag to `b`. +Only affects numerical output such as hexadecimal. + +--- + +```cpp +bool is_upper_case() const +``` +**Description** +Returns true if the upper case flag is set. + +--- + +```cpp +basic_format_spec& show_base(const bool b) +``` +**Description** +Sets the showbase flag to `b`. +Only affects binary and hexadecimal output. + +--- + +```cpp +bool is_show_base() const +``` +**Description** +Returns `true` if the `showbase` flag is set. + +--- + +```cpp +basic_format_spec& fill(const typename TString::value_type c) +``` +**Description** +Sets the fill character to `c`. + +--- + +```cpp +typename TString::value_type get_fill() const +``` +**Description** +Returns the fill character. + +--- + +```cpp +basic_format_spec& left() +``` +**Description** +Sets the `left` justified flag to `true`. + +--- + +```cpp +bool is_left() const +``` +**Description** +Returns `true` if the `left` justified flag is set. + +--- + +```cpp +basic_format_spec& right() +``` +**Description** +Sets the left justified flag to false. + +--- + +```cpp +bool is_right() const +``` +**Description** +Returns `true` if the `left` justified flag is clear. + +```cpp +basic_format_spec& boolalpha(bool b) +``` +**Description** +Sets the `bool alpha` flag to `b`. + +--- + +```cpp +bool is_boolalpha() const +``` +Returns `true` if the `bool alpha` flag is set. + +## Typedefs + +| Type | Specialisation | +| -------------- | --------------------------------------- | +| format_spec | etl::basic_format_spec | +| wformat_spec | etl::basic_format_spec | +| u16format_spec | etl::basic_format_spec | +| u32format_spec | etl::basic_format_spec | + +## Stream manipulators +These manipulators are used in conjunction with the ETL's string streams. +Streams may also use a `format_spec` as a manipulator. + +```cpp +setbase(uint32_t base) +``` +**Description** +Sets the base for numerical output to base. + +--- + +```cpp +setw(uint32_t width) +``` +**Description** +Sets the format width to `width`. + +--- + +```cpp +template +setfill(TChar fill) +``` +**Description** +Sets the fill character to fill. + +--- + +```cpp +setprecision(uint32_t precision) +``` +**Description** +Sets the number of decimal places to precision. + +--- + +```cpp +bin +``` +**Description** +Sets the base for numerical output to binary. + +--- + +```cpp +oct +``` +**Description** +Sets the base for numerical output to octal. + +--- + +```cpp +dec +``` +**Description** +Sets the base for numerical output to decimal. + +--- + +```cpp +hex +``` +**Description** +Sets the base for numerical output to hexadecimal. + +--- + +```cpp +left +``` +**Description** +Sets the alignment to left. + +--- + +```cpp +right +``` +**Description** +Sets the alignment to right. + +--- + +```cpp +boolalpha +``` +**Description** +Sets the boolalpha flag to true. + +--- + +```cpp +noboolalpha +``` +**Description** +Sets the boolalpha flag to false. + +--- + +```cpp +uppercase +``` +**Description** +Sets the uppercase flag to true. + +--- + +```cpp +nouppercase +``` +**Description** +Sets the uppercase flag to false. + +--- + +```cpp +showbase +``` +**Description** +Sets the showbase flag to true. + +--- + +```cpp +noshowbase +``` +**Description** +Sets the showbase flag to false. + +## Example (to_string) + +```cpp +etl::format_spec format; + +// Format as a hex character, minimum fill width of 8, fill with zeros. +format.hex().width(8).fill('0'); + +etl::string<8> text; + +// 'text' is set to "00123456" +etl::to_string(1193046, text, format); + +// Format minimum fill width of 8, fill with space and three decimal digits. +format.width(8).fill(' ').precision(3); + +// 'text' is set to " 3.142" +etl::to_string(3.1415, text, format); +``` + +## Example (string_stream) +```cpp +etl::string<20> buffer; +etl::string_stream stream(buffer); + +// Manipulators +stream << etl::showbase + << etl::bin << 123456 << " " + << etl::oct << 123456 << " " + << etl::dec << 123456 << " " + << etl::hex << 123456; +``` +The generated string:- + +`0b11110001001000000 0361100 123456 0x1e240` + +--- + +```cpp +// Format spec +etl::format_spec format; +format.show_base(true).hex(); + +stream << format << 123456; +``` + +The generated string:- + +`0x1e240`