forked from boostorg/static_string
Update docs with design
This commit is contained in:
42
README.md
42
README.md
@ -14,48 +14,6 @@ compile-time fixed capacity and contiguous embedded storage in which the
|
|||||||
characters are placed within the string object itself. Its API closely
|
characters are placed within the string object itself. Its API closely
|
||||||
resembles that of `std::string`
|
resembles that of `std::string`
|
||||||
|
|
||||||
## Motivation
|
|
||||||
|
|
||||||
A fixed capacity string is useful when:
|
|
||||||
|
|
||||||
* Memory allocation is not possible, e.g., embedded environments without a free
|
|
||||||
store, where only a stack and the static memory segment are available.
|
|
||||||
* Memory allocation imposes an unacceptable performance penalty.
|
|
||||||
e.g., with respect to latency.
|
|
||||||
* Allocation of objects with complex lifetimes in the static-memory
|
|
||||||
segment is required.
|
|
||||||
* A dynamically-resizable string is required within `constexpr` functions.
|
|
||||||
* The storage location of the static_vector elements is required to be
|
|
||||||
within the string object itself (e.g. to support `memcpy` for serialization
|
|
||||||
purposes).
|
|
||||||
|
|
||||||
## Design
|
|
||||||
|
|
||||||
The over-arching design goal is to resemble the interface and behavior of
|
|
||||||
`std::string` as much as possible. When any operation would exceed the
|
|
||||||
maximum allowed size of the string, `std::length_error` is thrown. All
|
|
||||||
algorithms which throw exceptions provide the strong exception safety
|
|
||||||
guarantee. This is intended to be a drop in replacement for `std::string`.
|
|
||||||
All the operations for `fixed_string` work when the source is within the string itself.
|
|
||||||
|
|
||||||
The API of `fixed_string` only diverges from `std::string` in few places,
|
|
||||||
being `substr` for which this implementation returns a string view instead of `fixed_string,
|
|
||||||
and certain functions that will never throw are marked as `noexcept`, which diverges from
|
|
||||||
those of `std::string`. Every function that is in the C++20 specification of `std::string` is
|
|
||||||
present in this implementation, with the only difference being the lack of `constexpr`
|
|
||||||
for the time being. The avaliable overloads for `fixed_string` are identical to those
|
|
||||||
of `std::string`, except for `operator+` which is explicitly deleted as no reasonable implementation
|
|
||||||
would be possible, due to the difficulty in determining the size of the resulting `fixed_string`.
|
|
||||||
|
|
||||||
## Iterators
|
|
||||||
|
|
||||||
The iterator invalidation rules are different than those for `std::string`,
|
|
||||||
since:
|
|
||||||
|
|
||||||
* Moving a string invalidates all iterators
|
|
||||||
* Swapping two strings invalidates all iterators
|
|
||||||
|
|
||||||
|
|
||||||
## License
|
## License
|
||||||
|
|
||||||
Distributed under the Boost Software License, Version 1.0.
|
Distributed under the Boost Software License, Version 1.0.
|
||||||
|
@ -57,7 +57,7 @@ A fixed capacity string is useful when:
|
|||||||
segment is required.
|
segment is required.
|
||||||
* A dynamically-resizable string is required within `constexpr` functions.
|
* A dynamically-resizable string is required within `constexpr` functions.
|
||||||
* The storage location of the static_vector elements is required to be
|
* The storage location of the static_vector elements is required to be
|
||||||
within the string object itself (e.g. to support memcopy for serialization
|
within the string object itself (e.g. to support `memcpy` for serialization
|
||||||
purposes).
|
purposes).
|
||||||
|
|
||||||
[endsect]
|
[endsect]
|
||||||
@ -70,7 +70,17 @@ The over-arching design goal is to resemble the interface and behavior of
|
|||||||
`std::string` as much as possible. When any operation would exceed the
|
`std::string` as much as possible. When any operation would exceed the
|
||||||
maximum allowed size of the string, `std::length_error` is thrown. All
|
maximum allowed size of the string, `std::length_error` is thrown. All
|
||||||
algorithms which throw exceptions provide the strong exception safety
|
algorithms which throw exceptions provide the strong exception safety
|
||||||
guarantee.
|
guarantee. This is intended to be a drop in replacement for `std::string`.
|
||||||
|
All the operations for `fixed_string` work when the source is within the string itself.
|
||||||
|
|
||||||
|
The API of `fixed_string` only diverges from `std::string` in few places,
|
||||||
|
being `substr` for which this implementation returns a string view instead of `fixed_string`,
|
||||||
|
and certain functions that will never throw are marked as `noexcept`, which diverges from
|
||||||
|
those of `std::string`. Every function that is in the C++20 specification of `std::string` is
|
||||||
|
present in this implementation, with the only difference being the lack of `constexpr`
|
||||||
|
for the time being. The avaliable overloads for `fixed_string` are identical to those
|
||||||
|
of `std::string`, except for `operator+` which is explicitly deleted as no reasonable implementation
|
||||||
|
would be possible, due to the difficulty in determining the size of the resulting `fixed_string`.
|
||||||
|
|
||||||
[endsect]
|
[endsect]
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user