14 #ifndef LLVM_CLANG_REWRITE_CORE_REWRITEROPE_H
15 #define LLVM_CLANG_REWRITE_CORE_REWRITEROPE_H
17 #include "llvm/ADT/IntrusiveRefCntPtr.h"
18 #include "llvm/ADT/StringRef.h"
19 #include "llvm/Support/Compiler.h"
41 assert(
RefCount > 0 &&
"Reference count is already zero.");
43 delete [] (
char*)
this;
89 public std::iterator<std::forward_iterator_tag, const char, ptrdiff_t> {
102 : CurNode(nullptr), CurPiece(nullptr), CurChar(0) {}
105 return (*CurPiece)[CurChar];
109 return CurPiece == RHS.CurPiece && CurChar == RHS.CurChar;
116 if (CurChar+1 < CurPiece->
size())
127 return llvm::StringRef(&(*CurPiece)[0], CurPiece->
size());
148 unsigned size()
const;
172 enum { AllocChunkSize = 4080 };
175 RewriteRope() : AllocBuffer(nullptr), AllocOffs(AllocChunkSize) {}
177 : Chunks(RHS.Chunks), AllocBuffer(nullptr), AllocOffs(AllocChunkSize) {
193 Chunks.
insert(0, MakeRopeString(Start, End));
197 assert(Offset <=
size() &&
"Invalid position to insert!");
198 if (Start == End)
return;
199 Chunks.
insert(Offset, MakeRopeString(Start, End));
203 assert(Offset+NumBytes <=
size() &&
"Invalid region to erase!");
204 if (NumBytes == 0)
return;
205 Chunks.
erase(Offset, NumBytes);
209 RopePiece MakeRopeString(
const char *Start,
const char *
End);
void insert(unsigned Offset, const char *Start, const char *End)
void insert(unsigned Offset, const RopePiece &R)
RopePieceBTree::iterator iterator
void erase(unsigned Offset, unsigned NumBytes)
RopePieceBTreeIterator & operator++()
bool operator!=(const RopePieceBTreeIterator &RHS) const
llvm::StringRef piece() const
llvm::IntrusiveRefCntPtr< RopeRefCountString > StrData
void erase(unsigned Offset, unsigned NumBytes)
RopePieceBTree::iterator const_iterator
RopePieceBTreeIterator iterator
RewriteRope(const RewriteRope &RHS)
const char & operator[](unsigned Offset) const
RopePiece(llvm::IntrusiveRefCntPtr< RopeRefCountString > Str, unsigned Start, unsigned End)
void assign(const char *Start, const char *End)
char & operator[](unsigned Offset)
RopePieceBTreeIterator operator++(int)
bool operator==(const RopePieceBTreeIterator &RHS) const