Add a shared string that can be used in properties

This commit is contained in:
Olivier Goffart 2020-05-18 16:00:50 +02:00
parent e6be2c91b8
commit 25bf149e13
14 changed files with 208 additions and 52 deletions

View file

@ -0,0 +1,36 @@
#include <string_view>
#include "sixtyfps_string_internal.h"
namespace sixtyfps {
struct SharedString
{
SharedString() { internal::sixtyfps_shared_string_from_bytes(this, "", 0); }
SharedString(std::string_view s)
{
internal::sixtyfps_shared_string_from_bytes(this, s.data(), s.size());
}
SharedString(const SharedString &other)
{
internal::sixtyfps_shared_string_clone(this, &other);
}
~SharedString() { internal::sixtyfps_shared_string_drop(this); }
SharedString &operator=(const SharedString &other)
{
internal::sixtyfps_shared_string_drop(this);
internal::sixtyfps_shared_string_clone(this, &other);
}
SharedString &operator=(std::string_view s)
{
internal::sixtyfps_shared_string_drop(this);
internal::sixtyfps_shared_string_from_bytes(this, s.data(), s.size());
}
SharedString &operator=(SharedString &&other) { std::swap(inner, other.inner); }
operator std::string_view() const { return internal::sixtyfps_shared_string_bytes(this); }
auto data() const -> const char * { return internal::sixtyfps_shared_string_bytes(this); }
private:
void *inner; // opaque
};
}