home *** CD-ROM | disk | FTP | other *** search
- #ifndef MEMORY_FILE
- #define MEMORY_FILE
-
- #include "jmalloc.hpp"
- #include "system.h"
-
- class memory_file
- {
- unsigned char *data;
-
- public :
- long wp,rp,size;
-
- memory_file(int size) : size(size)
- //{{
- {
- data=(unsigned char *)jmalloc(size,"memory file");
- wp=rp=0;
- }
- //}}
-
- ~memory_file()
- //{{
- {
- jfree(data);
- }
- //}}
-
- void write_short(unsigned short x)
- //{{{
- {
- x=int_to_local(x);
- write(&x,2);
- }
- //}}
-
- void write_long(unsigned long x)
- //{{{
- {
- x=long_to_local(x);
- write(&x,4);
- }
- //}}}
-
- unsigned short read_short()
- //{{{
- {
- unsigned short x;
- read(&x,2);
- return int_to_local(x);
- }
- //}}}
-
- unsigned long read_long()
- //{{{
- {
- unsigned long x;
- read(&x,4);
- return long_to_local(x);
- }
- //}}
-
- long read(void *buf, int rsize)
- //{{{
- {
- if (rp+rsize>wp)
- rsize=wp-rp;
- memcpy(buf,data+rp,rsize);
- rp+=rsize;
- return rsize;
- }
- //}}
-
- long write(void *buf, int wsize)
- //{{
- {
- if (wp+wsize>size)
- wsize=size-wp;
- memcpy(data+wp,buf,wsize);
- wp+=wsize;
- return wsize;
- }
- //}}
-
- void write_byte(unsigned char c)
- //{{{
- {
- if (wp+1<=size)
- data[wp++]=c;
- }
- //}}
-
- unsigned char read_byte()
- //{{
- {
- if (rp+1<=wp)
- return data[rp++];
- return 0;
- }
- //}}
-
- } ;
-
-
- #endif
- //{{{ Emacs Locals
- // Local Variables:
- // folded-file: t
- // End:
- //}}}
-