From kde-devel Sun Jun 22 10:48:50 2003 From: "Friedrich W. H. Kossebau" Date: Sun, 22 Jun 2003 10:48:50 +0000 To: kde-devel Subject: Re: Hex editor widget X-MARC-Message: https://marc.info/?l=kde-devel&m=105627927432100 Am Samstag, 21. Juni 2003 17:37 schrieb Gerold J. Wucherpfennig: > On Saturday 21 June 2003 00:45, Russell Miller wrote: > > I would also be interested in such a widget - one of the apps that I have > > written, kbview, would benefit greatly from such a widget. What I would > > like to see (not a list of demands, but a list of wishes): > > > 7. On demand loading - don't load the whole file at once. > This is needed to work with huge files. Also this had been in my mind when introducing the data abstraction layer (I called KDataBuffer, anyone a better name?). As this is a special need it should be implemented on a per-app base I think (although I wouldn't mind if someone comes up with a general pattern class for this :) But I still have no real clue how to support an on-demand loading in the API of the layer. I thought of something like a call prepareRange( Offset, Length ) where the actual working range (whatever this defines) is ensured to be loaded and accessable in memory by call to data()/datum(). Does anyone know of a design pattern for this? FWIW here is my actual draft: class KDataBuffer { public: KDataBuffer(); virtual ~KDataBuffer(); public: int size() const; public: /** locates working range, returns false if failed */ virtual bool prepareRange( int Offset, int Length ) = 0; /** expects pointer to memory, should be in prepared range */ virtual const char *data( int Offset, int Length ) = 0; /** */ virtual const char datum( int Offset ) = 0; /** is the buffer changeable ?*/ virtual bool isReadOnly() const = 0; /** is the buffer resizeable ?*/ virtual bool isResizeable() const = 0; /** inserts at Position */ virtual int insert( const char*, int Length, int Pos = 0 ) = 0; /** removes beginning with position as much as possible, returns length of removed */ virtual int remove( int Pos, int Length ) = 0; /** replaces as much as possible, returns length of substituted */ virtual int replace( const char*, int Length, int Pos ) = 0; /** searches beginning with byte at Pos, returns -1 if nothing found */ virtual int find( const char*, int Length, int Pos = 0 ) = 0; /** searches backward beginning with byte at Pos, returns -1 if nothing found */ virtual int rfind( const char*, int Length, int Pos = -1 ) = 0; /* virtual int find( const QString &expr, bool cs, bool wo, bool forward = true, int *index = 0 ); */ protected: /** size of the data */ int Size; }; Friedrich >> Visit http://mail.kde.org/mailman/listinfo/kde-devel#unsub to unsubscribe <<