|
BDE 4.39.x Production Release
|
#include <bslstl_string.h>
This component private class describes the basic data layout for a string class and provides methods to help encapsulate internal string implementation details. It is parameterized by CHAR_TYPE and SIZE_TYPE only, and implements the portion of basic_string that does not need to know about its (template parameter) types CHAR_TRAITS or ALLOCATOR. It contains the following data fields: pointer to string, short string buffer, length, and capacity. The purpose of the short string buffer is to implement a "short string optimization" such that strings with lengths shorter than a certain number of characters are stored directly inside the string object (inside the short string buffer), and thereby avoid memory allocations/deallocations.
See bslstl_string
Public Types | |
| enum | ShortBufferConstraints { SHORT_BUFFER_MIN_BYTES = 20 , SHORT_BUFFER_NEED_BYTES } |
| enum | ConfigurableParameters { BASIC_STRING_DEALLOCATE_IN_CLEAR = false , BASIC_STRING_HONOR_SHRINK_REQUEST = false } |
Public Member Functions | |
| BSLMF_ASSERT (SHORT_BUFFER_BYTES >=sizeof(CHAR_TYPE *)) | |
| BSLMF_NESTED_TRAIT_DECLARATION (String_Imp, BloombergLP::bslmf::IsBitwiseMoveable) | |
| String_Imp () | |
| String_Imp (SIZE_TYPE length, SIZE_TYPE capacity) | |
| String_Imp (const String_Imp &original)=default | |
| ~String_Imp ()=default | |
| String_Imp & | operator= (const String_Imp &rhs)=default |
| void | swap (String_Imp &other) |
| void | resetFields () |
| CHAR_TYPE * | dataPtr () |
| bool | isShortString () const |
| const CHAR_TYPE * | dataPtr () const |
Static Public Member Functions | |
| static SIZE_TYPE | computeNewCapacity (SIZE_TYPE newLength, SIZE_TYPE oldCapacity, SIZE_TYPE maxSize) |
Public Attributes | ||
| union { | ||
| BloombergLP::bsls::AlignedBuffer< SHORT_BUFFER_BYTES, BloombergLP::bsls::AlignmentFromType< CHAR_TYPE >::VALUE > d_short | ||
| CHAR_TYPE * d_start_p | ||
| }; | ||
| SIZE_TYPE | d_length | |
| SIZE_TYPE | d_capacity | |
| enum bsl::String_Imp::ConfigurableParameters |
| enum bsl::String_Imp::ShortBufferConstraints |
This enum contains values necessary to calculate the size of the short string buffer. The starting value is SHORT_BUFFER_MIN_BYTES, which defines the minimal number of bytes (or char values) that the short string buffer should be able to contain. Then this value is aligned to a word boundary. Then we make sure that it fits at least one CHAR_TYPE character (because the default state of the string object requires that the first character is initialized with a NULL-terminator). The final output of this enum used by String_Imp is the SHORT_BUFFER_CAPACITY value. It defines the capacity of the short string buffer and also the capacity of the default-constructed empty string object.
| Enumerator | |
|---|---|
| SHORT_BUFFER_MIN_BYTES | |
| SHORT_BUFFER_NEED_BYTES | |
| BSLS_PLATFORM_AGGRESSIVE_INLINE bsl::String_Imp< CHAR_TYPE, SIZE_TYPE >::String_Imp | ( | ) |
Create a String_Imp object having (default) attribute values except that the d_capacity attribute is initialized with SHORT_BUFFER_CAPACITY.
| BSLS_PLATFORM_AGGRESSIVE_INLINE bsl::String_Imp< CHAR_TYPE, SIZE_TYPE >::String_Imp | ( | SIZE_TYPE | length, |
| SIZE_TYPE | capacity | ||
| ) |
Create a String_Imp object and initialize the d_length and d_capacity attributes with the specified length and specified capacity, respectively. If capacity is less than SHORT_BUFFER_CAPACITY, then d_capacity is set to SHORT_BUFFER_CAPACITY. The value of the d_short and d_start_p fields are left uninitialized. basic_string is required to assign either d_short or d_start_p to a proper value before using any methods of this class.
|
default |
Create a String_Imp object having the same value as the specified original object.
|
default |
Destroy this object.
| bsl::String_Imp< CHAR_TYPE, SIZE_TYPE >::BSLMF_ASSERT | ( | SHORT_BUFFER_BYTES >= | sizeofCHAR_TYPE * | ) |
| bsl::String_Imp< CHAR_TYPE, SIZE_TYPE >::BSLMF_NESTED_TRAIT_DECLARATION | ( | String_Imp< CHAR_TYPE, SIZE_TYPE > | , |
| BloombergLP::bslmf::IsBitwiseMoveable | |||
| ) |
|
static |
Compute and return the capacity required for a string having the specified newLength and using the specified oldCapacity to exercise an exponential capacity growth necessary to ensure the amortized linear complexity of push_back and other operations and ensuring that the new capacity does not exceed the specified maxSize.
newLength > oldCapacity, newLength < maxSize, and oldCapacity < maxSize.
|
inline |
Return an address providing modifiable access to the NULL-terminated C-string stored by this string object.
isShortString.
|
inline |
Return an address providing non-modifiable access to the NULL-terminated C-string stored by this string object.
isShortString.
|
inline |
Return true if this object contains a short string and the string data is stored in the short string buffer, and false if the object contains a long string (and the short string buffer contains a pointer to the string data allocated externally).
|
default |
Assign to this object the value of the specified rhs object, and return a reference providing modifiable access to this object.
|
inline |
Reset all fields of this object to their default-constructed state.
| void bsl::String_Imp< CHAR_TYPE, SIZE_TYPE >::swap | ( | String_Imp< CHAR_TYPE, SIZE_TYPE > & | other | ) |
Efficiently exchange the value of this object with the value of the specified other object. This method provides the no-throw exception-safety guarantee.
| union { ... } bsl::String_Imp< CHAR_TYPE, SIZE_TYPE > |
This is the union of the string storage options: it can either be stored inside the short string buffer, d_short, or in the externally allocated memory, pointed to by d_start_p.
| SIZE_TYPE bsl::String_Imp< CHAR_TYPE, SIZE_TYPE >::d_capacity |
| SIZE_TYPE bsl::String_Imp< CHAR_TYPE, SIZE_TYPE >::d_length |
| BloombergLP::bsls::AlignedBuffer< SHORT_BUFFER_BYTES, BloombergLP::bsls::AlignmentFromType<CHAR_TYPE>::VALUE> bsl::String_Imp< CHAR_TYPE, SIZE_TYPE >::d_short |
| CHAR_TYPE* bsl::String_Imp< CHAR_TYPE, SIZE_TYPE >::d_start_p |