An open API service indexing awesome lists of open source software.

https://github.com/b1tflyyyy/utf8-string-cpp

Implementation of wrapper over standard string to work with UTF-8 encoding
https://github.com/b1tflyyyy/utf8-string-cpp

cmake cpp cpp20 cross-platform encoding library linux mit mit-license string unicode utf-8 windows

Last synced: 12 months ago
JSON representation

Implementation of wrapper over standard string to work with UTF-8 encoding

Awesome Lists containing this project

README

          

## โš™๏ธ UTF-8 String For C++ (utf8::ustring)

## ๐Ÿ“œ Brief Description:
This is an implementation of the `UTF-8` encoding standard for `C++`, the implementation is based on the `std::basic_string` class, this gives us the advantage of `std::basic_string` class functions, as well as compatibility with some functions from the standard library.

## ๐Ÿ“ Code Style:
- `C++ AStyle` code style was used for this project.

## ๐Ÿ›  Technical Dependencies:
- `C++ 20`
- `CMake 3.14`

## ๐Ÿ”— Support Status On Systems:
- [X] Linux (verified on clang)
- [X] Windows (verified on gcc && clang)

## ๐Ÿ’ซ Library Features:
- Support for creating an object from: `std::string, std::string_view, const char*`
- Comparing an `utf8::ustring` with `utf8::ustring`, `const char*`, `std::string`, `std::string_view`
- Copy/Move (<- assignment also) constructor implemented
- O(1) Random Access
- Simple replacement of any character, e.g. a smaller character `(1 byte)` with a larger character `(2-3-4 bytes)`.
- Write/read to a file

## โšก๏ธ Performance Test:
| String-Version | Test-Name | iteration count | time (for all iterations) |
|:--------------:|:-----------------------:|:---------------:|:-------------------------:|
| std::string | replace_char | 500'000 | ~0.57s |
| utf8::ustring | replace_char | 500'000 | ~0.60s |

## โ” Replace Char O(1) ?
Yes and no, in the case where we replace a character with another `with the same size`, we have `O(1)`, in the other case we have `O(~N)`, where N is the length of the string.
But in any case we have `O(1) Random Access`.

## ๐Ÿ“š Code Samples:
```cpp
std::string str{ "hello world!" };
utf8::ustring ustr{ str };

ustr.replace_char("ะฟ", 0); // "ะฟello world!"

ustr == "hi !"; // false
ustr == str; // false
```

## โญ๏ธ Coming Soon:
- Docs.

### ยฉ 2024 Andrii (AKA b1tflyyyy). All rights reserved.