home *** CD-ROM | disk | FTP | other *** search
- /***********************************************************************
-
- CSDB Library, Version 1.6.b
- Released: March 2nd 1995
-
- Header file of the VRAM class.
- This works as a permanent heap, placed on disk.
-
- Copyright(c) 1994,1995
- Combis
- The Netherlands
- ***********************************************************************/
-
- #ifndef __CSVRAM_H
- #define __CSVRAM_H
-
- #include "cstypes.h"
- #include "cspage.h"
-
- #pragma warn -sig
-
- typedef U32 VPOI;
-
- class VRAM: public PAGE
- {
-
- private:
-
- typedef U32 PANR;
- typedef U16 OFNR;
-
- typedef struct
- {
- U16 alloc;
- } dhd; //Data HeaDer
-
- typedef struct
- {
- VPOI pos;
- } edc; //Empty Data Chain
-
-
- protected:
-
- CSCHAR *add_last;
- edc *eda;
- U16 vpo_offmask;
- U8 vpo_shftrig;
- U8 esr; // Shift Right
- U16 enr; // NumbeR (highest array index)
- int epc; // Eda Page Changed.
- U32 numall; // Number of Allocations currently done.
- PANR pag_last;
- int relshrink;
- U16 maxlen;
-
-
- void define_eca(void);
- void open_eca(void);
- void save_eca(void);
- void close_eca(void);
-
- void reset_eca(void);
- U16 *amount(void *ptr) { return (((U16 *)ptr)-1); }
- U16 *amount(VPOI ptr) { return amount(R(ptr)); }
-
- void free(void *p, VPOI p2 );
- U32 P(VPOI p) { return p>>vpo_shftrig; }
- U16 O(VPOI p) { return p&vpo_offmask; }
-
- void init_vars(void);
- void init_defaults(void);
-
- virtual void check_id(U32 id);
- virtual void set_id(void);
- int sort_eca(void);
- void head2vars(void);
- void vars2head(void);
-
-
- ////////////////////////////////////////////////////////////////////////
- ////////////////////// PUBLIC FUNCTIONS ////////////////////////////////
- ////////////////////////////////////////////////////////////////////////
-
- public:
-
- VRAM(void);
- ~VRAM(void);
-
- //////////////////////// Compatibility functions //////////////////////
- VPOI vmalloc(U16 size) { return malloc(size); }
- void vfree(VPOI p) { free(p); }
-
-
- //////////////////////// Definition //////////////////////////////////////////
- int define(CSCHAR *name,U16 struclen);
-
-
- //////////////////////// Open & Close ////////////////////////////////////////
- int open(CSCHAR *name,S16 kb_buf);
- int close(void);
- int save(void);
-
- //////////////////////// Malloc & Free ////////////////////////////////
- VPOI malloc(U16 size);
- void free(VPOI p) { numall--; free(W(p),p); }
-
- U16 alloc(VPOI p) { return *amount(p)-sizeof(dhd); }
- U16 alloc(void *p) { return *amount(p)-sizeof(dhd); }
-
- //////////////////////// Read & Write /////////////////////////////////
- CSCHAR *W(VPOI p);
- CSCHAR *R(VPOI p);
-
- //////////////////////// Report Writing //////////////////////////////////////
- U16 report(CSCHAR *name,S16 sub=1);
- void report(FILE *fipo,S16 sub);
-
- //////////////////////// Data in Header Page /////////////////////////////////
- /* Inherited
- int data_2_header(void * ptr,U16 length);
- int header_2_data(void * ptr,U16 length);
- U16 max_data_in_header(void);
- */
-
- ////////////////////////// Miscellaneous ///////////////////////////////////////
- virtual int class_ID(void) { return CS_CLID_VRAM; }
-
- int defrag(void) { return sort_eca(); }
- void info(void);
- U32 number(void) { return numall; }
- int zap(void);
- int empty(void);
- void root(VPOI p);
- VPOI root(void);
- U16 max_len(void) { return maxlen; }
- int relocate_when_shrunk(void) { return relshrink; }
- void relocate_when_shrunk(int ToF);
-
- };
-
- #pragma warn .sig
-
- #endif
-