Go to the documentation of this file.
31 #ifndef _UCOMMON_MEMORY_H_
32 #define _UCOMMON_MEMORY_H_
34 #ifndef _UCOMMON_CONFIG_H_
38 #ifndef _UCOMMON_PROTOCOLS_H_
42 #ifndef _UCOMMON_LINKED_H_
46 #ifndef _UCOMMON_STRING_H_
61 class __EXPORT
memalloc :
public __PROTOCOL MemoryProtocol
64 friend class bufpager;
66 size_t pagesize, align;
69 typedef struct mempage {
117 inline unsigned max(
void)
const {
125 inline size_t size(
void)
const {
154 virtual void *
_alloc(
size_t size) __OVERRIDE;
187 mutable pthread_mutex_t mutex;
196 virtual void _lock(
void) __OVERRIDE;
252 virtual void *
_alloc(
size_t size) __OVERRIDE;
262 class __EXPORT ObjectPager :
protected memalloc
271 friend class ObjectPager;
273 inline void set(member *node) {
277 inline void *get(
void)
const {
281 member(LinkedObject **root);
285 inline void *operator*()
const {
297 __DELETE_COPY(ObjectPager);
300 ObjectPager(
size_t objsize,
size_t pagesize = 256);
308 void *get(
unsigned item)
const;
334 void *invalid(
void)
const;
348 inline ObjectPager::member *begin(
void) {
349 return static_cast<ObjectPager::member *
>(root);
352 inline operator bool()
const {
356 inline bool operator!()
const {
364 inline unsigned count(
void)
const {
371 typedef linked_pointer<ObjectPager::member> iterator;
373 inline size_t size(
void) {
377 inline unsigned pages(
void) {
393 void assign(ObjectPager& source);
415 virtual bool filter(
char *text,
size_t size);
431 inline void set(
member *node)
438 inline const char *operator*()
const {
442 inline const char *get(
void)
const {
469 const char *
get(
unsigned item)
const;
476 void set(
unsigned item,
const char *
string);
482 void add(
const char *text);
538 inline const char *at(
unsigned item)
const {
592 unsigned token(
const char *text,
const char *list,
const char *quote = NULL,
const char *end = NULL);
594 unsigned split(
const char *text,
const char *
string,
unsigned flags = 0);
596 unsigned split(stringex_t& expr,
const char *
string,
unsigned flags = 0);
598 String join(
const char *prefix = NULL,
const char *middle = NULL,
const char *suffix = NULL);
600 inline operator bool()
const {
604 inline bool operator!()
const {
608 inline StringPager& operator=(
char **list) {
613 inline const char *operator*() {
617 inline operator char **() {
626 inline size_t size(
void)
const {
630 inline unsigned pages(
void)
const {
668 virtual bool filter(
char *filename,
size_t size) __OVERRIDE;
682 void operator=(
const char *path);
684 inline const char *operator*()
const {
688 inline operator bool()
const {
692 inline bool operator!()
const {
696 inline unsigned count(
void)
const {
710 inline const char *get(
unsigned item)
const {
714 inline const char *at(
unsigned item)
const {
718 inline size_t size(
void)
const {
722 inline unsigned pages(
void)
const {
824 class __EXPORT
PagerPool :
public __PROTOCOL MemoryProtocol
828 mutable pthread_mutex_t mutex;
852 template <
typename T>
856 __DELETE_COPY(
pager);
870 return new(get(
sizeof(T))) T;
878 return new(get(
sizeof(T))) T;
897 inline String str(
StringPager& list,
const char *prefix = NULL,
const char *middle = NULL,
const char *suffix = NULL) {
898 return list.join(prefix, middle, suffix);
void assign(StringPager &source)
Assign foreign pager to us.
pager(mempager *heap=NULL)
Construct a pager and optionally assign a private pager heap.
void purge(void)
Purge all allocated memory and heap pages immediately.
virtual void _unlock(void)
Unlock the memory pager mutex.
T * operator*()
Create a managed object by pointer reference.
virtual void _lock(void)
Lock the memory pager mutex.
A copy-on-write string class that operates by reference count.
const char * operator[](unsigned item) const
Return specified member from pager list.
Directory pager is a paged string list for directory file names.
void release(void)
Release a pager object reference.
Abstract interfaces and support.
virtual ~memalloc()
Destroy a memory pager.
const char * pop(void)
Remove element from back of list.
DirPager dirlist_t
A convenience type for using DirPager directly.
unsigned utilization(void) const
Determine fragmentation level of acquired heap pages.
void reset(void)
Reset state of object.
void assign(mempager &source)
Assign foreign pager to us.
A managed private heap for small allocations.
StringPager & operator<<(const char *text)
Convenience operator to add to pager.
unsigned pages(void) const
Get the number of pages that have been allocated from the real heap.
void set(unsigned item, const char *string)
Replace string item in list.
A memory protocol pager for private heap manager.
void put(PagerObject *object)
Return a pager object back to our free list.
const char * pull(void)
Remove element from front of list.
void operator+=(LinkedObject *object)
Add a linked object to the autorelease pool.
~autorelease()
Destroy an autorelease pool and delete member objects.
char ** list(void)
Gather index list.
Common base class for all objects that can be formed into a linked list.
unsigned count(void) const
Get the number of items in the pager string list.
autorelease()
Create an initially empty autorelease pool.
void add(char **list)
Add list to list.
void push(char **text)
Add text list to front of list.
virtual void * _alloc(size_t size)
Allocate memory from the pager heap.
T &() limit(T &value, T &low, T &high)
Convenience macro to range restrict values.
unsigned max(void) const
Get the maximum number of pages that are permitted.
virtual void * _alloc(size_t size)
Allocate memory from the pager heap.
StringPager stringlist_t
A convenience type for paged string lists.
mempager(size_t page=0)
Construct a memory pager.
A redirection base class for the memory protocol.
Various miscellaneous platform specific headers and defines.
memalloc(size_t page=0)
Construct a memory pager.
Common namespace for all ucommon objects.
void assign(memalloc &source)
Assign foreign pager to us.
Pager pool base class for managed memory pools.
void add(const char *text)
Add text to list.
T copy(const T &src)
Convenience function to copy objects.
const char * operator[](unsigned item) const
Return specified filename from directory list.
void dealloc(void)
Return the pager object back to it's originating pool.
Convenience class for directories.
void clear(void)
Purge all members and release pager member.
unsigned token(const char *text, const char *list, const char *quote=NULL, const char *end=NULL)
Tokenize a string and add each token to the StringPager.
virtual bool filter(char *text, size_t size)
Filter text in a derived class.
void assign(DirPager &source)
Assign foreign pager to us.
void set(char **list)
Set list to list.
Linked objects, lists, templates, and containers.
StringPager(size_t pagesize=256)
Create a pager with a maximum page size.
void operator+=(const char *text)
Convenience operator to add to pager and auto-sort.
StringPager::member stringlistitem_t
A convenience type for paged string list items.
A base class for reference counted objects.
virtual bool filter(char *filename, size_t size)
Filter filenames in a derived class.
unsigned utilization(void)
Determine fragmentation level of acquired heap pages.
StringPager::member * begin(void) const
Get root of pager list.
void push(const char *text)
Add text to front of list.
linked_pointer< StringPager::member > iterator
Convenience typedef for iterative pointer.
void retain(void)
Retain by marking as self referenced list.
PagerObject()
Create a pager object.
size_t size(void) const
Get the size of a memory page.
This is a base class for objects that may be created in pager pools.
A smart pointer template for iterating linked lists.
A common string class and character string support functions.
String pager for storing lists of NULL terminated strings.
page_t * pager(void)
Acquire a new page from the heap.
const char * get(unsigned item) const
Get string item from list.
bool load(const char *path)
Load a directory path.
T * operator()(void)
Create a managed object by casting reference.
void sort(void)
Sort members.
Mempager managed type factory for pager pool objects.
virtual void dealloc(void *memory)
Return memory back to pager heap.
Create a linked list of auto-releasable objects.
void release(void)
Destroy an autorelease pool and delete member objects.
virtual ~mempager()
Destroy a memory pager.
void purge(void)
Purge all allocated memory and heap pages immediately.