00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018 #ifndef _GLPLIB_H
00019 #define _GLPLIB_H
00020
00021 #define save_pointer dy_glp_save_pointer
00022 #define read_pointer dy_glp_read_pointer
00023
00024 #define init_lib_env dy_glp_init_lib_env
00025 #define get_env_ptr dy_glp_get_env_ptr
00026 #define free_lib_env dy_glp_free_lib_env
00027
00028 #define print dy_glp_print
00029 #define fault dy_glp_fault
00030 #define _insist dy_glp_insist
00031 #define watch dy_glp_watch
00032
00033 #define umalloc dy_glp_umalloc
00034 #define ucalloc dy_glp_ucalloc
00035 #define ufree dy_glp_ufree
00036
00037 #define create_pool dy_glp_create_pool
00038 #define get_atom dy_glp_get_atom
00039 #define free_atom dy_glp_free_atom
00040 #define get_atomv dy_glp_get_atomv
00041 #define clear_pool dy_glp_clear_pool
00042 #define delete_pool dy_glp_delete_pool
00043
00044 extern void save_pointer(void *ptr);
00045
00046
00047 extern void *read_pointer(void);
00048
00049
00050 typedef struct ENV ENV;
00051 typedef struct MEM MEM;
00052
00053 struct ENV
00054 {
00055 MEM *mem_ptr;
00056
00057 int mem_limit;
00058
00059
00060 int mem_total;
00061
00062
00063 int mem_tpeak;
00064
00065 int mem_count;
00066
00067 int mem_cpeak;
00068
00069 };
00070
00071 extern int init_lib_env(void);
00072
00073
00074 extern ENV *get_env_ptr(void);
00075
00076
00077 extern int free_lib_env(void);
00078
00079
00080 extern void print(const char *fmt, ...);
00081
00082
00083 extern void fault(const char *fmt, ...);
00084
00085
00086 #define insist(expr) \
00087 ((void)((expr) || (_insist(#expr, __FILE__, __LINE__), 1)))
00088
00089 extern void _insist(const char *expr, const char *file, int line);
00090
00091
00092 extern double watch(void);
00093
00094
00095
00096
00097
00098
00099
00100 #define align_boundary sizeof(double)
00101
00102 #define align_datasize(size) \
00103 ((((size) + (align_boundary - 1)) / align_boundary) * align_boundary)
00104
00105 struct MEM
00106 {
00107 int size;
00108
00109 int flag;
00110
00111 MEM *prev;
00112
00113 MEM *next;
00114
00115
00116
00117 };
00118
00119 extern void *umalloc(int size);
00120
00121
00122 extern void *ucalloc(int nmemb, int size);
00123
00124
00125 extern void ufree(void *ptr);
00126
00127
00128 typedef struct POOL POOL;
00129
00130 struct POOL
00131 {
00132 int size;
00133
00134
00135 void *avail;
00136
00137 void *link;
00138
00139
00140 int used;
00141
00142 void *stock;
00143
00144 int count;
00145
00146 };
00147
00148 extern POOL *create_pool(int size);
00149
00150
00151 extern void *get_atom(POOL *pool);
00152
00153
00154 extern void free_atom(POOL *pool, void *ptr);
00155
00156
00157 extern void *get_atomv(POOL *pool, int size);
00158
00159
00160 extern void clear_pool(POOL *pool);
00161
00162
00163 extern void delete_pool(POOL *pool);
00164
00165
00166 #endif
00167
00168