You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
libsxmp/include/sntl/mcache.h

51 lines
1.4 KiB
C

#ifndef __MCACHE_H__
#define __MCACHE_H__
#include <stdint.h>
#include <time.h>
#include <sys/types.h>
#include <pthread.h>
#include <tdata/usrtc.h>
#include <tdata/idx_allocator.h>
#define _MCACHE_MAGIC 0xabcdbeef
#define _MPG_SIZE 4096
#define _MCACHE_EMINSIZE sizeof(unsigned long) + 8
#define _MCACHE_EMAXSIZE sizeof(unsigned long) + 224
#define _MCACHE_PREALLOC (1 << 1) /* preallocate elements on initialization */
#define _MCACHE_ALLOCAHEAD (1 << 2) /* allocate more ahead */
#define _MCACHE_MEMFREE (1 << 3) /* free as possible */
/* this structure used to store info on page, and located
* at the beginning of the allocated page
*/
struct _mpg {
void *addr;
unsigned int use;
usrtc_node_t node;
10 years ago
} __attribute__((packed));
typedef struct __sntl_mcache_ {
unsigned int magic; /** < first 32bit to check it */
usrtc_t pg_tree; /** < pages tree */
size_t esize; /** < element size*/
pthread_rwlock_t lock; /** < thread safe cap */
usrtc_t allocated; /** < allocated elements to increase allocation */
usrtc_t used; /** < used ones */
unsigned int epc; /** < elements per cache page */
int flags; /** < flags of the cache */
10 years ago
} sntl_mcache_t;
int sntl_mcache_init(sntl_mcache_t*, size_t, int);
void* sntl_mcache_alloc(sntl_mcache_t*);
void sntl_mcache_free(void*);
void sntl_mcache_destroy(sntl_mcache_t*);
#endif /* __MCACHE_H__ */