* Copyright 2001-2006, Haiku, Inc. All Rights Reserved.
* Distributed under the terms of the MIT License.
*
* Authors:
* Marc Flerackers (mflerackers@androme.be)
*/
#ifndef __TEXTGAPBUFFER_H
#define __TEXTGAPBUFFER_H
#include <SupportDefs.h>
#include <TextView.h>
class BFile;
namespace BPrivate {
class TextGapBuffer {
public:
TextGapBuffer();
~TextGapBuffer();
void InsertText(const char* inText, int32 inNumItems,
int32 inAtIndex);
bool InsertText(BFile* file, int32 fileOffset,
int32 amount, int32 atIndex);
void RemoveRange(int32 start, int32 end);
bool FindChar(char inChar, int32 fromIndex,
int32* ioDelta);
const char* Text();
const char* RealText();
int32 Length() const;
const char* GetString(int32 fromOffset, int32* numBytes);
void GetString(int32 offset, int32 length,
char* buffer);
char RealCharAt(int32 offset) const;
bool PasswordMode() const;
void SetPasswordMode(bool);
private:
void _MoveGapTo(int32 toIndex);
void _EnlargeGapTo(int32 inCount);
void _ShrinkGapTo(int32 inCount);
int32 fItemCount;
char* fBuffer;
int32 fBufferCount;
int32 fGapIndex;
int32 fGapCount;
char* fScratchBuffer;
int32 fScratchSize;
bool fPasswordMode;
};
inline int32
TextGapBuffer::Length() const
{
return fItemCount;
}
inline char
TextGapBuffer::RealCharAt(int32 index) const
{
if (index < 0 || index >= fItemCount) {
if (index != fItemCount)
debugger("RealCharAt: invalid index supplied");
return 0;
}
return index < fGapIndex ? fBuffer[index] : fBuffer[index + fGapCount];
}
}
#endif