]> git.lizzy.rs Git - plan9front.git/blob - sys/include/pool.h
libc, seconds: new time and date apis (try 2)
[plan9front.git] / sys / include / pool.h
1 typedef struct Pool Pool;
2 struct Pool {
3         char*   name;
4         uintptr maxsize;
5
6         uintptr cursize;
7         uintptr curfree;
8         uintptr curalloc;
9
10         ulong   minarena;       /* smallest size of new arena */
11         ulong   quantum;        /* allocated blocks should be multiple of */
12         ulong   minblock;       /* smallest newly allocated block */
13
14         void*   freeroot;       /* actually Free* */
15         void*   arenalist;      /* actually Arena* */
16
17         void*   (*alloc)(ulong);
18         int     (*merge)(void*, void*);
19         void    (*move)(void* from, void* to);
20
21         int     flags;
22         int     nfree;
23         int     lastcompact;
24
25         void    (*lock)(Pool*);
26         void    (*unlock)(Pool*);
27         void    (*print)(Pool*, char*, ...);
28         void    (*panic)(Pool*, char*, ...);
29         void    (*logstack)(Pool*);
30
31         void*   private;
32 };
33
34 extern void*    poolalloc(Pool*, ulong);
35 extern void*    poolallocalign(Pool*, ulong, ulong, long, ulong);
36 extern void     poolfree(Pool*, void*);
37 extern ulong    poolmsize(Pool*, void*);
38 extern int      poolisoverlap(Pool*, void*, ulong);
39 extern void*    poolrealloc(Pool*, void*, ulong);
40 extern void     poolcheck(Pool*);
41 extern int      poolcompact(Pool*);
42 extern void     poolblockcheck(Pool*, void*);
43 extern void     pooldump(Pool*);
44
45 extern Pool*    mainmem;
46 extern Pool*    imagmem;
47 extern Pool*    secrmem;
48
49 enum {  /* flags */
50         POOL_ANTAGONISM = 1<<0,
51         POOL_PARANOIA   = 1<<1,
52         POOL_VERBOSITY  = 1<<2,
53         POOL_DEBUGGING  = 1<<3,
54         POOL_LOGGING    = 1<<4,
55         POOL_TOLERANCE  = 1<<5,
56         POOL_NOREUSE    = 1<<6,
57 };