skia2/modules/skplaintexteditor/include/stringslice.h
John Stiles a6841be235 Enable ClangTidy check llvm-namespace-comment.
This fixes a large number of SkSL namespaces which were labeled as if
they were anonymous, and also a handful of other mislabeled namespaces.
Missing namespace-end comments have been added throughout.
A number of diffs are just indentation-related (adjusting 1- or 3-
space indents to 2-space).

Change-Id: I6c62052a0d3aea4ae12ca07e0c2a8587b2fce4ec
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/308503
Commit-Queue: John Stiles <johnstiles@google.com>
Reviewed-by: Mike Klein <mtklein@google.com>
Auto-Submit: John Stiles <johnstiles@google.com>
2020-08-06 19:07:52 +00:00

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 "modules/skplaintexteditor/include/stringview.h"
#include <memory>
#include <cstddef>
namespace SkPlainTextEditor {
// 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; }
SkPlainTextEditor::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 SkPlainTextEditor
#endif // stringslice_DEFINED