Utf16String.h 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. /*
  2. * Copyright (c) 2021, Tim Flynn <trflynn89@pm.me>
  3. *
  4. * SPDX-License-Identifier: BSD-2-Clause
  5. */
  6. #pragma once
  7. #include <AK/NonnullRefPtr.h>
  8. #include <AK/RefCounted.h>
  9. #include <AK/String.h>
  10. #include <AK/Types.h>
  11. #include <AK/Vector.h>
  12. namespace JS {
  13. namespace Detail {
  14. class Utf16StringImpl : public RefCounted<Utf16StringImpl> {
  15. public:
  16. ~Utf16StringImpl() = default;
  17. static NonnullRefPtr<Utf16StringImpl> create();
  18. static NonnullRefPtr<Utf16StringImpl> create(Vector<u16, 1>);
  19. static NonnullRefPtr<Utf16StringImpl> create(StringView);
  20. static NonnullRefPtr<Utf16StringImpl> create(Utf16View const&);
  21. Vector<u16, 1> const& string() const;
  22. Utf16View view() const;
  23. private:
  24. Utf16StringImpl() = default;
  25. explicit Utf16StringImpl(Vector<u16, 1> string);
  26. Vector<u16, 1> m_string;
  27. };
  28. }
  29. class Utf16String {
  30. public:
  31. Utf16String();
  32. explicit Utf16String(Vector<u16, 1>);
  33. explicit Utf16String(StringView);
  34. explicit Utf16String(Utf16View const&);
  35. Vector<u16, 1> const& string() const;
  36. Utf16View view() const;
  37. Utf16View substring_view(size_t code_unit_offset, size_t code_unit_length) const;
  38. Utf16View substring_view(size_t code_unit_offset) const;
  39. String to_utf8() const;
  40. u16 code_unit_at(size_t index) const;
  41. size_t length_in_code_units() const;
  42. bool is_empty() const;
  43. private:
  44. NonnullRefPtr<Detail::Utf16StringImpl> m_string;
  45. };
  46. }