e45bf6a603
Editor::copy() now writes into a buffer provided by the client. Editor::text() now returns a series of `pair<const char*, size_t>` instead of `const StringSlice&` Change-Id: Iff298dd7a80aaad19f9326d10c5b67bea5ef8e22 Reviewed-on: https://skia-review.googlesource.com/c/skia/+/232579 Commit-Queue: Hal Canary <halcanary@google.com> Reviewed-by: Ben Wagner <bungeman@google.com>
47 lines
1.6 KiB
C++
47 lines
1.6 KiB
C++
// Copyright 2019 Google LLC.
|
|
// Use of this source code is governed by a BSD-style license that can be found in the LICENSE file.
|
|
#ifndef stringslice_DEFINED
|
|
#define stringslice_DEFINED
|
|
|
|
#include "experimental/editor/stringview.h"
|
|
|
|
#include <memory>
|
|
#include <cstddef>
|
|
|
|
namespace editor {
|
|
// A lightweight modifiable string class.
|
|
class StringSlice {
|
|
public:
|
|
StringSlice() = default;
|
|
StringSlice(const char* s, std::size_t l) { this->insert(0, s, l); }
|
|
StringSlice(StringSlice&&);
|
|
StringSlice(const StringSlice& that) : StringSlice(that.begin(), that.size()) {}
|
|
~StringSlice() = default;
|
|
StringSlice& operator=(StringSlice&&);
|
|
StringSlice& operator=(const StringSlice&);
|
|
|
|
// access:
|
|
// Does not have a c_str method; is *not* NUL-terminated.
|
|
const char* begin() const { return fPtr.get(); }
|
|
const char* end() const { return fPtr ? fPtr.get() + fLength : nullptr; }
|
|
std::size_t size() const { return fLength; }
|
|
editor::StringView view() const { return {fPtr.get(), fLength}; }
|
|
|
|
// mutation:
|
|
void insert(std::size_t offset, const char* text, std::size_t length);
|
|
void remove(std::size_t offset, std::size_t length);
|
|
|
|
// modify capacity only:
|
|
void reserve(std::size_t size) { if (size > fCapacity) { this->realloc(size); } }
|
|
void shrink() { this->realloc(fLength); }
|
|
|
|
private:
|
|
struct FreeWrapper { void operator()(void*); };
|
|
std::unique_ptr<char[], FreeWrapper> fPtr;
|
|
std::size_t fLength = 0;
|
|
std::size_t fCapacity = 0;
|
|
void realloc(std::size_t);
|
|
};
|
|
} // namespace editor;
|
|
#endif // stringslice_DEFINED
|