From: Chris Lattner Date: Mon, 14 Apr 2008 17:12:49 +0000 (+0000) Subject: remove ifdefs X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=e5cd857f7e71d5789df25d5046d104b93cf2a71c;p=clang remove ifdefs git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@49651 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/include/clang/Rewrite/RewriteRope.h b/include/clang/Rewrite/RewriteRope.h index 5cc5b57b90..951a06367d 100644 --- a/include/clang/Rewrite/RewriteRope.h +++ b/include/clang/Rewrite/RewriteRope.h @@ -20,8 +20,6 @@ #include "llvm/Support/Casting.h" -//#define USE_ROPE_VECTOR - namespace clang { struct RopeRefCountString { @@ -80,7 +78,6 @@ struct RopePiece { -#ifndef USE_ROPE_VECTOR using llvm::dyn_cast; using llvm::cast; @@ -735,73 +732,9 @@ public: }; -#endif // ifndef USE_ROPE_VECTOR - -#ifdef USE_ROPE_VECTOR - class RewriteRope; - -template -class RewriteRopeIterator : - public bidirectional_iterator { - PieceIterType CurPiece; - unsigned CurChar; - friend class RewriteRope; -public: - RewriteRopeIterator(const PieceIterType &curPiece, unsigned curChar) - : CurPiece(curPiece), CurChar(curChar) {} - - CharType &operator*() const { - return (*CurPiece)[CurChar]; - } - - bool operator==(const RewriteRopeIterator &RHS) const { - return CurPiece == RHS.CurPiece && CurChar == RHS.CurChar; - } - bool operator!=(const RewriteRopeIterator &RHS) const { - return !operator==(RHS); - } - - inline RewriteRopeIterator& operator++() { // Preincrement - if (CurChar+1 < CurPiece->size()) - ++CurChar; - else { - CurChar = 0; - ++CurPiece; - } - return *this; - } - - RewriteRopeIterator operator+(int Offset) const { - assert(Offset >= 0 && "FIXME: Only handle forward case so far!"); - - PieceIterType Piece = CurPiece; - unsigned Char = CurChar; - while (Char+Offset >= Piece->size()) { - Offset -= Piece->size()-Char; - ++Piece; - Char = 0; - } - Char += Offset; - return RewriteRopeIterator(Piece, Char); - } - - inline RewriteRopeIterator operator++(int) { // Postincrement - RewriteRopeIterator tmp = *this; ++*this; return tmp; - } -}; -#endif - - /// RewriteRope - A powerful string class, todo generalize this. class RewriteRope { -#ifdef USE_ROPE_VECTOR - // FIXME: This could be significantly faster by using a balanced binary tree - // instead of a list. - std::list Chunks; - unsigned CurSize; -#else RopePieceBTree Chunks; -#endif /// We allocate space for string data out of a buffer of size AllocChunkSize. /// This keeps track of how much space is left. @@ -810,16 +743,9 @@ class RewriteRope { enum { AllocChunkSize = 4080 }; public: - RewriteRope() : -#ifdef USE_ROPE_VECTOR - CurSize(0), -#endif - AllocBuffer(0), AllocOffs(AllocChunkSize) {} - RewriteRope(const RewriteRope &RHS) : Chunks(RHS.Chunks), -#ifdef USE_ROPE_VECTOR - CurSize(RHS.CurSize), -#endif - AllocBuffer(0), AllocOffs(AllocChunkSize) { + RewriteRope() : AllocBuffer(0), AllocOffs(AllocChunkSize) {} + RewriteRope(const RewriteRope &RHS) + : Chunks(RHS.Chunks), AllocBuffer(0), AllocOffs(AllocChunkSize) { } ~RewriteRope() { @@ -827,33 +753,16 @@ public: AllocBuffer->dropRef(); } -#ifdef USE_ROPE_VECTOR - typedef RewriteRopeIterator::iterator> iterator; - typedef RewriteRopeIterator::const_iterator> const_iterator; - - iterator begin() { return iterator(Chunks.begin(), 0); } - iterator end() { return iterator(Chunks.end(), 0); } - const_iterator begin() const { return const_iterator(Chunks.begin(), 0); } - const_iterator end() const { return const_iterator(Chunks.end(), 0); } - - unsigned size() const { return CurSize; } -#else typedef RopePieceBTree::iterator iterator; typedef RopePieceBTree::iterator const_iterator; iterator begin() const { return Chunks.begin(); } iterator end() const { return Chunks.end(); } unsigned size() const { return Chunks.size(); } -#endif void clear() { Chunks.clear(); -#ifdef USE_ROPE_VECTOR - CurSize = 0; -#endif } -#ifndef USE_ROPE_VECTOR void assign(const char *Start, const char *End) { clear(); Chunks.insert(0, MakeRopeString(Start, End)); @@ -868,105 +777,6 @@ public: if (NumBytes == 0) return; Chunks.erase(Offset, NumBytes); } -#endif - -#ifdef USE_ROPE_VECTOR - void assign(const char *Start, const char *End) { - clear(); - Chunks.push_back(MakeRopeString(Start, End)); - CurSize = End-Start; - } - - iterator getAtOffset(unsigned Offset) { - assert(Offset <= CurSize && "Offset out of range!"); - if (Offset == CurSize) return iterator(Chunks.end(), 0); - std::list::iterator Piece = Chunks.begin(); - while (Offset >= Piece->size()) { - Offset -= Piece->size(); - ++Piece; - } - return iterator(Piece, Offset); - } - - const_iterator getAtOffset(unsigned Offset) const { - assert(Offset <= CurSize && "Offset out of range!"); - if (Offset == CurSize) return const_iterator(Chunks.end(), 0); - std::list::const_iterator Piece = Chunks.begin(); - while (Offset >= Piece->size()) { - Offset -= Piece->size(); - ++Piece; - } - return const_iterator(Piece, Offset); - } - - - void insert(iterator Loc, const char *Start, const char *End) { - if (Start == End) return; - Chunks.insert(SplitAt(Loc), MakeRopeString(Start, End)); - CurSize += End-Start; - } - - void erase(iterator Start, iterator End) { - if (Start == End) return; - - // If erase is localized within the same chunk, this is a degenerate case. - if (Start.CurPiece == End.CurPiece) { - RopePiece &Chunk = *Start.CurPiece; - unsigned NumDel = End.CurChar-Start.CurChar; - CurSize -= NumDel; - - // If deleting from start of chunk, just adjust range. - if (Start.CurChar == 0) { - if (Chunk.EndOffs != End.CurChar) - Chunk.StartOffs += NumDel; - else // Deleting entire chunk. - Chunks.erase(End.CurPiece); - return; - } - - // If deleting to the end of chunk, just adjust range. - if (End.CurChar == Chunk.size()) { - Chunk.EndOffs -= NumDel; - return; - } - - // If deleting the middle of a chunk, split this chunk and adjust the end - // piece. - SplitAt(Start)->StartOffs += NumDel; - return; - } - - // Otherwise, the start chunk and the end chunk are different. - std::list::iterator CurPiece = Start.CurPiece; - - // Delete the end of the start chunk. If it is the whole thing, remove it. - { - RopePiece &StartChunk = *CurPiece; - unsigned NumDel = StartChunk.size()-Start.CurChar; - CurSize -= NumDel; - if (Start.CurChar == 0) { - // Delete the whole chunk. - Chunks.erase(CurPiece++); - } else { - // Otherwise, just move the end of chunk marker up. - StartChunk.EndOffs -= NumDel; - ++CurPiece; - } - } - - // If deleting a span of chunks, nuke them all now. - while (CurPiece != End.CurPiece) { - CurSize -= CurPiece->size(); - Chunks.erase(CurPiece++); - } - - // Finally, erase the start of the end chunk if appropriate. - if (End.CurChar != 0) { - End.CurPiece->StartOffs += End.CurChar; - CurSize -= End.CurChar; - } - } -#endif private: RopePiece MakeRopeString(const char *Start, const char *End) { @@ -1008,34 +818,6 @@ private: AllocBuffer->addRef(); return RopePiece(AllocBuffer, 0, Len); } - -#ifdef USE_ROPE_VECTOR - - /// SplitAt - If the specified iterator position has a non-zero character - /// number, split the specified buffer up. This guarantees that the specified - /// iterator is at the start of a chunk. Return the chunk it is at the start - /// of. - std::list::iterator SplitAt(iterator Loc) { - std::list::iterator Chunk = Loc.CurPiece; - - // If the specified position is at the start of a piece, return it. - if (Loc.CurChar == 0) - return Chunk; - - // Otherwise, we have to split the specified piece in half, inserting the - // new piece into the list of pieces. - - // Make a new piece for the prefix part. - Chunks.insert(Chunk, RopePiece(Chunk->StrData, Chunk->StartOffs, - Chunk->StartOffs+Loc.CurChar)); - - // Make the current piece refer the suffix part. - Chunk->StartOffs += Loc.CurChar; - - // Return the old chunk, which is the suffix. - return Chunk; - } -#endif }; } // end namespace clang diff --git a/lib/Rewrite/Rewriter.cpp b/lib/Rewrite/Rewriter.cpp index f7dcdd23fc..4f54102d02 100644 --- a/lib/Rewrite/Rewriter.cpp +++ b/lib/Rewrite/Rewriter.cpp @@ -27,12 +27,7 @@ void RewriteBuffer::RemoveText(unsigned OrigOffset, unsigned Size) { assert(RealOffset+Size < Buffer.size() && "Invalid location"); // Remove the dead characters. -#ifdef USE_ROPE_VECTOR - RewriteRope::iterator I = Buffer.getAtOffset(RealOffset); - Buffer.erase(I, I+Size); -#else Buffer.erase(RealOffset, Size); -#endif // Add a delta so that future changes are offset correctly. AddDelta(OrigOffset, -Size); @@ -46,15 +41,7 @@ void RewriteBuffer::InsertText(unsigned OrigOffset, if (StrLen == 0) return; unsigned RealOffset = getMappedOffset(OrigOffset, InsertAfter); - -#ifdef USE_ROPE_VECTOR - assert(RealOffset <= Buffer.size() && "Invalid location"); - - // Insert the new characters. - Buffer.insert(Buffer.getAtOffset(RealOffset), StrData, StrData+StrLen); -#else Buffer.insert(RealOffset, StrData, StrData+StrLen); -#endif // Add a delta so that future changes are offset correctly. AddDelta(OrigOffset, StrLen); @@ -66,30 +53,8 @@ void RewriteBuffer::InsertText(unsigned OrigOffset, void RewriteBuffer::ReplaceText(unsigned OrigOffset, unsigned OrigLength, const char *NewStr, unsigned NewLength) { unsigned RealOffset = getMappedOffset(OrigOffset, true); -#ifdef USE_ROPE_VECTOR - assert(RealOffset+OrigLength <= Buffer.size() && "Invalid location"); - - // Overwrite the common piece. - unsigned CommonLength = std::min(OrigLength, NewLength); - std::copy(NewStr, NewStr+CommonLength, Buffer.getAtOffset(RealOffset)); - - // If replacing without shifting around, just overwrite the text. - if (OrigLength == NewLength) - return; - - // If inserting more than existed before, this is like an insertion. - if (NewLength > OrigLength) { - Buffer.insert(Buffer.getAtOffset(RealOffset+OrigLength), - NewStr+OrigLength, NewStr+NewLength); - } else { - // If inserting less than existed before, this is like a removal. - RewriteRope::iterator I = Buffer.getAtOffset(RealOffset+NewLength); - Buffer.erase(I, I+(OrigLength-NewLength)); - } -#else Buffer.erase(RealOffset, OrigLength); Buffer.insert(RealOffset, NewStr, NewStr+NewLength); -#endif if (OrigLength != NewLength) AddDelta(OrigOffset, NewLength-OrigLength); }