[ox] Fix issues in String Types section of docs
All checks were successful
Build / build (push) Successful in 1m8s
All checks were successful
Build / build (push) Successful in 1m8s
This commit is contained in:
58
deps/ox/ox-docs.md
vendored
58
deps/ox/ox-docs.md
vendored
@@ -191,9 +191,13 @@ maintain a reference to the data.
|
|||||||
Views should be used where you otherwise might use a const reference to a
|
Views should be used where you otherwise might use a const reference to a
|
||||||
string store type.
|
string store type.
|
||||||
|
|
||||||
|
Having all of these different string types may sound like an interoperability
|
||||||
|
nightmare, but taking string view types extensively where applicable makes the
|
||||||
|
imagined interoperability issues virtually non-existent.
|
||||||
|
|
||||||
#### String Store Types
|
#### String Store Types
|
||||||
|
|
||||||
##### String
|
##### String / BasicString
|
||||||
|
|
||||||
```ox::String```, or really ```ox::BasicString```, is Ox's version of
|
```ox::String```, or really ```ox::BasicString```, is Ox's version of
|
||||||
```std::string```.
|
```std::string```.
|
||||||
@@ -209,7 +213,7 @@ small string buffers.
|
|||||||
// s can hold up to 100 bytes, plus one for a null terminator before allocating
|
// s can hold up to 100 bytes, plus one for a null terminator before allocating
|
||||||
ox::BasicString<100> s;
|
ox::BasicString<100> s;
|
||||||
```
|
```
|
||||||
Also ulike ```std::string```, ```String``` has an explicit C-string conversion
|
Also unlike ```std::string```, ```ox::String``` has an explicit C-string conversion
|
||||||
constructor.
|
constructor.
|
||||||
This prevents accidental instantiations of ```String```.
|
This prevents accidental instantiations of ```String```.
|
||||||
|
|
||||||
@@ -241,6 +245,46 @@ s = "12345"; // valid
|
|||||||
s = "123456"; // will compile and run, but will get cut off at '5'
|
s = "123456"; // will compile and run, but will get cut off at '5'
|
||||||
```
|
```
|
||||||
|
|
||||||
|
This is useful for certain string categories that have fixed lengths, like UUID
|
||||||
|
strings or for numbers.
|
||||||
|
|
||||||
|
Ox makes use of ```IString``` in the following ways:
|
||||||
|
|
||||||
|
```cpp
|
||||||
|
using UUIDStr = ox::IString<36>;
|
||||||
|
|
||||||
|
// and
|
||||||
|
|
||||||
|
template<Integer_c Integer>
|
||||||
|
[[nodiscard]]
|
||||||
|
constexpr auto intToStr(Integer v) noexcept {
|
||||||
|
constexpr auto Cap = [] {
|
||||||
|
auto out = 0;
|
||||||
|
switch (sizeof(Integer)) {
|
||||||
|
case 1:
|
||||||
|
out = 4;
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
out = 6;
|
||||||
|
break;
|
||||||
|
case 4:
|
||||||
|
out = 11;
|
||||||
|
break;
|
||||||
|
case 8:
|
||||||
|
out = 22;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
return out + ox::is_signed_v<Integer>;
|
||||||
|
}();
|
||||||
|
ox::IString<Cap> out;
|
||||||
|
std::ignore = out.resize(out.cap());
|
||||||
|
ox::CharBuffWriter w{{out.data(), out.cap()}};
|
||||||
|
std::ignore = writeItoa(v, w);
|
||||||
|
std::ignore = out.resize(w.tellp());
|
||||||
|
return out;
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
##### StringParam
|
##### StringParam
|
||||||
|
|
||||||
```StringParam``` is a weird type.
|
```StringParam``` is a weird type.
|
||||||
@@ -264,13 +308,14 @@ void f() {
|
|||||||
```
|
```
|
||||||
|
|
||||||
```StringParam``` has implicit conversion constructors, and will appropriately
|
```StringParam``` has implicit conversion constructors, and will appropriately
|
||||||
move from r-value ```String```s.
|
move from r-value ```String```s or create a ```String``` if not passed
|
||||||
It will create a ```String``` if not passed ownership of an existing
|
ownership of an existing ```String```.
|
||||||
```String```.
|
Think of ```StringParam``` as a way to opt-in to implicit instantiation with
|
||||||
|
strings.
|
||||||
|
|
||||||
```StringParam``` can access the string as a view through the ```view()```
|
```StringParam``` can access the string as a view through the ```view()```
|
||||||
function, and the ```String``` inside can be accessed by moving from the
|
function, and the ```String``` inside can be accessed by moving from the
|
||||||
```StringParams```.
|
```StringParam```.
|
||||||
|
|
||||||
```cpp
|
```cpp
|
||||||
struct Type {
|
struct Type {
|
||||||
@@ -337,6 +382,7 @@ There are a few convenience aliases as well.
|
|||||||
* StringCR = String const&
|
* StringCR = String const&
|
||||||
* StringViewCR = StringView const&
|
* StringViewCR = StringView const&
|
||||||
* CStringViewCR = CStringView const&
|
* CStringViewCR = CStringView const&
|
||||||
|
* CString = const char*
|
||||||
|
|
||||||
String views do not generally need const references, but it does make debugging
|
String views do not generally need const references, but it does make debugging
|
||||||
easier, as we can skip the constructor call if a string view already exists.
|
easier, as we can skip the constructor call if a string view already exists.
|
||||||
|
|||||||
Reference in New Issue
Block a user