1 #ifndef RewindStorageObject_INCLUDED
2 #define RewindStorageObject_INCLUDED 1
3 
4 #include "StorageManager.h"
5 #include "Boolean.h"
6 #include "StringOf.h"
7 
8 #ifdef SP_NAMESPACE
9 namespace SP_NAMESPACE {
10 #endif
11 
12 class Messenger;
13 
14 class SP_API RewindStorageObject : public StorageObject {
15 public:
16   RewindStorageObject(Boolean mayRewind, Boolean canSeek);
17 protected:
18   PackedBoolean mayRewind_;
19 
20   void saveBytes(const char *, size_t);
21   Boolean readSaved(char *, size_t, size_t &);
22   Boolean rewind(Messenger &);
23   void willNotRewind();
24   void unread(const char *s, size_t n);
25   virtual Boolean seekToStart(Messenger &) = 0;
26 private:
27   PackedBoolean savingBytes_;
28   PackedBoolean readingSaved_;
29   PackedBoolean canSeek_;
30   String<char> savedBytes_;
31   size_t nBytesRead_;
32 };
33 
34 inline
saveBytes(const char * s,size_t n)35 void RewindStorageObject::saveBytes(const char *s, size_t n)
36 {
37   if (savingBytes_)
38     savedBytes_.append(s, n);
39 }
40 
41 #ifdef SP_NAMESPACE
42 }
43 #endif
44 
45 #endif /* not RewindStorageObject_INCLUDED */
46