maug
Quick and dirty C mini-augmentation library.
Loading...
Searching...
No Matches
Data Memory String Pools

Structure for storing a compact group of mutable, variable-length character strings. More...

Collaboration diagram for Data Memory String Pools:

Data Structures

struct  MDATA_STRPOOL
 A pool of immutable text strings. Deduplicates strings to save memory. More...
 

Macros

#define MDATA_STRPOOL_FLAG_IS_LOCKED   0x01
 
#define MDATA_STRPOOL_FLAG_DEDUPE   0x02
 
#define mdata_strpool_sz(sp)
 
#define mdata_strpool_is_locked(sp)
 
#define mdata_strpool_lock(sp)
 
#define mdata_strpool_unlock(sp)
 
#define mdata_strpool_get(sp, idx)
 
#define mdata_strpool_get_sz(sp, idx)
 
#define mdata_strpool_padding(str_sz)
 

Typedefs

typedef size_t mdata_strpool_idx_t
 

Functions

MERROR_RETVAL mdata_strpool_check_idx (struct MDATA_STRPOOL *sp, mdata_strpool_idx_t idx)
 Verify if the given mdata_strpool_idx_t is valid in the given strpool.
 
mdata_strpool_idx_t mdata_strpool_find (struct MDATA_STRPOOL *sp, const char *str, size_t str_sz)
 
MAUG_MHANDLE mdata_strpool_extract (struct MDATA_STRPOOL *sp, mdata_strpool_idx_t idx)
 Return a dynamically-allocated memory handle containing the contents of the string at the given index.
 
mdata_strpool_idx_t mdata_strpool_append (struct MDATA_STRPOOL *sp, const char *str, size_t str_sz, uint8_t flags)
 
MERROR_RETVAL mdata_strpool_remove (struct MDATA_STRPOOL *sp, mdata_strpool_idx_t idx)
 
MERROR_RETVAL mdata_strpool_alloc (struct MDATA_STRPOOL *sp, size_t alloc_sz)
 
void mdata_strpool_free (struct MDATA_STRPOOL *sp)
 

Detailed Description

Structure for storing a compact group of mutable, variable-length character strings.

Macro Definition Documentation

◆ mdata_strpool_get

#define mdata_strpool_get ( sp,
idx )
Value:
((idx >= 1 && idx < (sp)->str_sz) ? &((sp)->str_p[idx]) : NULL)

◆ mdata_strpool_get_sz

#define mdata_strpool_get_sz ( sp,
idx )
Value:
((idx >= sizeof( size_t ) && idx < (sp)->str_sz) ? \
(size_t)(*(&((sp)->str_p[idx - sizeof( size_t )]))) : 0)

◆ mdata_strpool_is_locked

#define mdata_strpool_is_locked ( sp)
Value:
(MDATA_STRPOOL_FLAG_IS_LOCKED == \
(MDATA_STRPOOL_FLAG_IS_LOCKED & (sp)->flags))

◆ mdata_strpool_lock

#define mdata_strpool_lock ( sp)
Value:
mdata_debug_printf( "locking strpool %p...", sp ); \
if( NULL != (sp)->str_p ) { \
error_printf( "str_p not null! double lock?" ); \
retval = MERROR_ALLOC; \
goto cleanup; \
} \
maug_mlock( (sp)->str_h, (sp)->str_p ); \
maug_cleanup_if_null_lock( char*, (sp)->str_p ); \
(sp)->flags |= MDATA_STRPOOL_FLAG_IS_LOCKED;

◆ mdata_strpool_padding

#define mdata_strpool_padding ( str_sz)
Value:
(sizeof( size_t ) - ((str_sz + 1 /* NULL */) % sizeof( size_t )))

◆ mdata_strpool_sz

#define mdata_strpool_sz ( sp)
Value:
((sp)->str_sz_max)

◆ mdata_strpool_unlock

#define mdata_strpool_unlock ( sp)
Value:
mdata_debug_printf( "unlocking strpool %p...", sp ); \
if( NULL != (sp)->str_p ) { \
maug_munlock( (sp)->str_h, (sp)->str_p ); \
(sp)->flags &= ~MDATA_STRPOOL_FLAG_IS_LOCKED; \
}