|
|
|
/***************************************************************************
|
|
|
|
kplainbuffer.h - description
|
|
|
|
-------------------
|
|
|
|
begin : Mit Jun 03 2003
|
|
|
|
copyright : (C) 2003 by Friedrich W. H. Kossebau
|
|
|
|
email : Friedrich.W.H@Kossebau.de
|
|
|
|
***************************************************************************/
|
|
|
|
|
|
|
|
/***************************************************************************
|
|
|
|
* *
|
|
|
|
* This library is free software; you can redistribute it and/or *
|
|
|
|
* modify it under the terms of the GNU Library General Public *
|
|
|
|
* License version 2 as published by the Free Software Foundation. *
|
|
|
|
* *
|
|
|
|
***************************************************************************/
|
|
|
|
|
|
|
|
|
|
|
|
#ifndef KHE_KPLAINBUFFER_H
|
|
|
|
#define KHE_KPLAINBUFFER_H
|
|
|
|
|
|
|
|
#include "kdatabuffer.h"
|
|
|
|
|
|
|
|
namespace KHE
|
|
|
|
{
|
|
|
|
/*
|
|
|
|
class KPlainBufferIterator : public KDataBufferIterator
|
|
|
|
{
|
|
|
|
}
|
|
|
|
*/
|
|
|
|
/** base class for all Data buffers that are used to display
|
|
|
|
* TODO: think about a way to inform KHexEdit that there has been
|
|
|
|
* a change in the buffer outside. what kind of changes are possible?
|
|
|
|
*@author Friedrich W. H. Kossebau
|
|
|
|
*/
|
|
|
|
|
|
|
|
class KPlainBuffer : public KDataBuffer
|
|
|
|
{
|
|
|
|
friend class KPlainBufferIterator;
|
|
|
|
|
|
|
|
public:
|
|
|
|
KPlainBuffer( char *D, unsigned int S, int RS = -1, bool KM = true );
|
|
|
|
KPlainBuffer( const char *D, unsigned int S );
|
|
|
|
KPlainBuffer( int S=0, int MS = -1 );
|
|
|
|
virtual ~KPlainBuffer();
|
|
|
|
|
|
|
|
public: // KDataBuffer API
|
|
|
|
virtual bool prepareRange( KSection Range ) const;
|
|
|
|
//virtual KDataBufferIterator *iterator() const;
|
|
|
|
virtual const char *dataSet( KSection S ) const;
|
|
|
|
virtual char datum( unsigned int Offset ) const;
|
|
|
|
virtual int size() const;
|
|
|
|
virtual bool isReadOnly() const;
|
|
|
|
virtual bool isModified() const;
|
|
|
|
|
|
|
|
virtual int insert( int Pos, const char*, int Length );
|
|
|
|
virtual int remove( KSection Remove );
|
|
|
|
virtual unsigned int replace( KSection Remove, const char*, unsigned int InputLength );
|
|
|
|
virtual int move( int DestPos, KSection SourceSection );
|
|
|
|
virtual int fill( const char FillChar, int Length = -1, unsigned int Pos = 0 );
|
|
|
|
virtual void setDatum( unsigned int Offset, const char Char );
|
|
|
|
|
|
|
|
virtual void setModified( bool M = true );
|
|
|
|
|
|
|
|
//virtual int find( const char*, int Length, int Pos = 0 ) const;
|
|
|
|
virtual int find( const char*KeyData, int Length, KSection Section ) const;
|
|
|
|
virtual int rfind( const char*, int Length, int Pos = -1 ) const;
|
|
|
|
|
|
|
|
/* virtual int find( const TQString &expr, bool cs, bool wo, bool forward = true, int *index = 0 ); */
|
|
|
|
|
|
|
|
public:
|
|
|
|
void setReadOnly( bool RO = true );
|
|
|
|
void setMaxSize( int MS );
|
|
|
|
/** sets whether the memory given by setData or in the constructor should be kept on resize
|
|
|
|
*/
|
|
|
|
void setKeepsMemory( bool KM = true );
|
|
|
|
|
|
|
|
public:
|
|
|
|
char *data() const;
|
|
|
|
int maxSize() const;
|
|
|
|
/** returns whether the memory of the byte array is kept */
|
|
|
|
bool keepsMemory() const;
|
|
|
|
|
|
|
|
protected:
|
|
|
|
/** resizes the buffer, if possible, saving the data and splitting the data, if demanded
|
|
|
|
* @param AddSize additional size the buffer should grow
|
|
|
|
* @param SplitPos if -1 does not split
|
|
|
|
* @param SaveUpperPart true if upper part should be copied into new buffer
|
|
|
|
* @return additional size the buffer has grown
|
|
|
|
*/
|
|
|
|
int addSize( int AddSize, int SplitPos = -1, bool SaveUpperPart = true );
|
|
|
|
|
|
|
|
protected:
|
|
|
|
/** */
|
|
|
|
char *Data;
|
|
|
|
/** size of the data */
|
|
|
|
unsigned int Size;
|
|
|
|
/** Size of data array */
|
|
|
|
unsigned int RawSize;
|
|
|
|
/** maximal size of array, unlimited if -1 */
|
|
|
|
int MaxSize;
|
|
|
|
/** flag whether the initially given memory should be kept */
|
|
|
|
bool KeepsMemory:1;
|
|
|
|
/** */
|
|
|
|
bool ReadOnly:1;
|
|
|
|
/** */
|
|
|
|
bool Modified:1;
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
inline bool KPlainBuffer::prepareRange( KSection ) const { return true; }
|
|
|
|
inline const char *KPlainBuffer::dataSet( KSection S ) const { return &Data[S.start()]; }
|
|
|
|
inline char KPlainBuffer::datum( unsigned int Offset ) const { return Data[Offset]; }
|
|
|
|
inline int KPlainBuffer::size() const { return Size; }
|
|
|
|
|
|
|
|
inline bool KPlainBuffer::isReadOnly() const { return ReadOnly; }
|
|
|
|
inline bool KPlainBuffer::isModified() const { return Modified; }
|
|
|
|
|
|
|
|
inline void KPlainBuffer::setDatum( unsigned int Offset, const char Char )
|
|
|
|
{ Data[Offset] = Char; Modified = true; }
|
|
|
|
|
|
|
|
inline void KPlainBuffer::setReadOnly( bool RO ) { ReadOnly = RO; }
|
|
|
|
inline void KPlainBuffer::setModified( bool M ) { Modified = M; }
|
|
|
|
inline void KPlainBuffer::setMaxSize( int MS ) { MaxSize = MS; }
|
|
|
|
inline void KPlainBuffer::setKeepsMemory( bool KM ) { KeepsMemory = KM; }
|
|
|
|
|
|
|
|
inline char *KPlainBuffer::data() const { return Data; }
|
|
|
|
inline int KPlainBuffer::maxSize() const { return MaxSize; }
|
|
|
|
inline bool KPlainBuffer::keepsMemory() const { return KeepsMemory; }
|
|
|
|
}
|
|
|
|
|
|
|
|
#endif
|