1b31b14e0SStefano Ceccherini /* 2b31b14e0SStefano Ceccherini * Copyright 2001-2006, Haiku, Inc. All Rights Reserved. 3b31b14e0SStefano Ceccherini * Distributed under the terms of the MIT License. 4b31b14e0SStefano Ceccherini * 5b31b14e0SStefano Ceccherini * Authors: 6b31b14e0SStefano Ceccherini * Marc Flerackers (mflerackers@androme.be) 7b31b14e0SStefano Ceccherini */ 8b31b14e0SStefano Ceccherini 9b31b14e0SStefano Ceccherini #ifndef __TEXTGAPBUFFER_H 10b31b14e0SStefano Ceccherini #define __TEXTGAPBUFFER_H 11b31b14e0SStefano Ceccherini 12b31b14e0SStefano Ceccherini #include <SupportDefs.h> 13b31b14e0SStefano Ceccherini 14b31b14e0SStefano Ceccherini 15b31b14e0SStefano Ceccherini class BFile; 16b31b14e0SStefano Ceccherini class _BTextGapBuffer_ { 17b31b14e0SStefano Ceccherini 18b31b14e0SStefano Ceccherini public: 19b31b14e0SStefano Ceccherini _BTextGapBuffer_(); 20b31b14e0SStefano Ceccherini virtual ~_BTextGapBuffer_(); 21b31b14e0SStefano Ceccherini 22b31b14e0SStefano Ceccherini void InsertText(const char *inText, int32 inNumItems, int32 inAtIndex); 23b31b14e0SStefano Ceccherini void InsertText(BFile *file, int32 fileOffset, int32 amount, int32 atIndex); 24b31b14e0SStefano Ceccherini void RemoveRange(int32 start, int32 end); 25b31b14e0SStefano Ceccherini 26b31b14e0SStefano Ceccherini void MoveGapTo(int32 toIndex); 27b31b14e0SStefano Ceccherini void SizeGapTo(int32 inCount); 28b31b14e0SStefano Ceccherini 29b31b14e0SStefano Ceccherini bool FindChar(char inChar, int32 fromIndex, int32 *ioDelta); 30b31b14e0SStefano Ceccherini 31b31b14e0SStefano Ceccherini const char *Text(); 32b31b14e0SStefano Ceccherini int32 Length() const; 33b31b14e0SStefano Ceccherini char operator[](int32 index) const; 34b31b14e0SStefano Ceccherini 35b31b14e0SStefano Ceccherini 36b31b14e0SStefano Ceccherini // char *RealText(); 37*de20f0faSStefano Ceccherini const char *GetString(int32 fromOffset, int32 *numBytes); 38b31b14e0SStefano Ceccherini void GetString(int32 offset, int32 length, char *buffer); 39b31b14e0SStefano Ceccherini 40b31b14e0SStefano Ceccherini char RealCharAt(int32 offset) const; 41b31b14e0SStefano Ceccherini 42b31b14e0SStefano Ceccherini bool PasswordMode() const; 43b31b14e0SStefano Ceccherini void SetPasswordMode(bool); 44b31b14e0SStefano Ceccherini 45b31b14e0SStefano Ceccherini // void Resize(int32 size); 46b31b14e0SStefano Ceccherini 47b31b14e0SStefano Ceccherini protected: 48b31b14e0SStefano Ceccherini int32 fExtraCount; // when realloc()-ing 49b31b14e0SStefano Ceccherini int32 fItemCount; // logical count 50b31b14e0SStefano Ceccherini char *fBuffer; // allocated memory 51b31b14e0SStefano Ceccherini int32 fBufferCount; // physical count 52b31b14e0SStefano Ceccherini int32 fGapIndex; // gap position 53b31b14e0SStefano Ceccherini int32 fGapCount; // gap count 54b31b14e0SStefano Ceccherini char *fScratchBuffer; // for GetString 55b31b14e0SStefano Ceccherini int32 fScratchSize; // scratch size 56b31b14e0SStefano Ceccherini bool fPasswordMode; 57b31b14e0SStefano Ceccherini }; 58b31b14e0SStefano Ceccherini 59b31b14e0SStefano Ceccherini 60b31b14e0SStefano Ceccherini inline int32 61b31b14e0SStefano Ceccherini _BTextGapBuffer_::Length() const 62b31b14e0SStefano Ceccherini { 63b31b14e0SStefano Ceccherini return fItemCount; 64b31b14e0SStefano Ceccherini } 65b31b14e0SStefano Ceccherini 66b31b14e0SStefano Ceccherini 67b31b14e0SStefano Ceccherini inline char 68b31b14e0SStefano Ceccherini _BTextGapBuffer_::operator[](long index) const 69b31b14e0SStefano Ceccherini { 70b31b14e0SStefano Ceccherini return (index < fGapIndex) ? fBuffer[index] : fBuffer[index + fGapCount]; 71b31b14e0SStefano Ceccherini } 72b31b14e0SStefano Ceccherini 73b31b14e0SStefano Ceccherini #endif //__TEXTGAPBUFFER_H 74