diff options
Diffstat (limited to 'include')
-rw-r--r-- | include/Accessor.h | 39 | ||||
-rw-r--r-- | include/WindowAccessor.h | 31 |
2 files changed, 36 insertions, 34 deletions
diff --git a/include/Accessor.h b/include/Accessor.h index b420397e2..aa3ba8e3b 100644 --- a/include/Accessor.h +++ b/include/Accessor.h @@ -11,11 +11,42 @@ typedef bool (*PFNIsCommentLeader)(Accessor &styler, int pos, int len); // Interface to data in a Scintilla class Accessor { +protected: + enum {extremePosition=0x7FFFFFFF}; + // bufferSize is a trade off between time taken to copy the characters and retrieval overhead + // slopSize positions the buffer before the desired position in case there is some backtracking + enum {bufferSize=4000, slopSize=bufferSize/8}; + char buf[bufferSize+1]; + int startPos; + int endPos; + int codePage; + + virtual bool InternalIsLeadByte(char ch)=0; + virtual void Fill(int position)=0; public: - virtual void SetCodePage(int codePage_)=0; - virtual char operator[](int position)=0; - virtual char SafeGetCharAt(int position, char chDefault=' ')=0; - virtual bool IsLeadByte(char ch)=0; + Accessor() : startPos(extremePosition), endPos(0), codePage(0) { } + char operator[](int position) { + if (position < startPos || position >= endPos) { + Fill(position); + } + return buf[position - startPos]; + } + char SafeGetCharAt(int position, char chDefault=' ') { + // Safe version of operator[], returning a defined value for invalid position + if (position < startPos || position >= endPos) { + Fill(position); + if (position < startPos || position >= endPos) { + // Position is outside range of document + return chDefault; + } + } + return buf[position - startPos]; + } + bool IsLeadByte(char ch) { + return codePage && InternalIsLeadByte(ch); + } + void SetCodePage(int codePage_) { codePage = codePage_; } + virtual char StyleAt(int position)=0; virtual int GetLine(int position)=0; virtual int LineStart(int line)=0; diff --git a/include/WindowAccessor.h b/include/WindowAccessor.h index a24ef9fa3..9f1750d52 100644 --- a/include/WindowAccessor.h +++ b/include/WindowAccessor.h @@ -4,16 +4,9 @@ class WindowAccessor : public Accessor { protected: - // bufferSize is a trade off between time taken to copy the characters and SendMessage overhead - // slopSize positions the buffer before the desired position in case there is some backtracking - enum {bufferSize=4000, slopSize=bufferSize/8}; - char buf[bufferSize+1]; WindowID id; PropSet &props; - int startPos; - int endPos; int lenDoc; - int codePage; char styleBuf[bufferSize]; int validLen; @@ -25,29 +18,7 @@ protected: void Fill(int position); public: WindowAccessor(WindowID id_, PropSet &props_) : - id(id_), props(props_), startPos(0x7FFFFFFF), endPos(0), - lenDoc(-1), codePage(0), validLen(0), chFlags(0) { - } - void SetCodePage(int codePage_) { codePage = codePage_; } - char operator[](int position) { - if (position < startPos || position >= endPos) { - Fill(position); - } - return buf[position - startPos]; - } - char SafeGetCharAt(int position, char chDefault=' ') { - // Safe version of operator[], returning a defined value for invalid position - if (position < startPos || position >= endPos) { - Fill(position); - if (position < startPos || position >= endPos) { - // Position is outside range of document - return chDefault; - } - } - return buf[position - startPos]; - } - bool IsLeadByte(char ch) { - return codePage && InternalIsLeadByte(ch); + id(id_), props(props_), lenDoc(-1), validLen(0), chFlags(0) { } char StyleAt(int position); int GetLine(int position); |