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);
const char * pull(void)
Remove element from front of list.
StringPager stringlist_t
A convenience type for paged string lists.
Convenience class for directories.
virtual void dealloc(void *memory)
Return memory back to pager heap.
void purge(void)
Purge all allocated memory and heap pages immediately.
T copy(const T &src)
Convenience function to copy objects.
virtual void _lock(void)
Lock the memory pager mutex.
T &() limit(T &value, T &low, T &high)
Convenience macro to range restrict values.
const char * operator[](unsigned item) const
Return specified filename from directory list.
virtual bool filter(char *filename, size_t size)
Filter filenames in a derived class.
void sort(void)
Sort members.
void reset(void)
Reset state of object.
void set(char **list)
Set list to list.
T * operator*()
Create a managed object by pointer reference.
Create a linked list of auto-releasable objects.
void dealloc(void)
Return the pager object back to it's originating pool.
T * operator()(void)
Create a managed object by casting reference.
const char * pop(void)
Remove element from back of list.
unsigned count(void) const
Get the number of items in the pager string list.
Common base class for all objects that can be formed into a linked list.
linked_pointer< StringPager::member > iterator
Convenience typedef for iterative pointer.
memalloc(size_t page=0)
Construct a memory pager.
autorelease()
Create an initially empty autorelease pool.
page_t * pager(void)
Acquire a new page from the heap.
void assign(memalloc &source)
Assign foreign pager to us.
Linked objects, lists, templates, and containers.
void assign(DirPager &source)
Assign foreign pager to us.
size_t size(void) const
Get the size of a memory page.
void put(PagerObject *object)
Return a pager object back to our free list.
Pager pool base class for managed memory pools.
void retain(void)
Retain by marking as self referenced list.
A copy-on-write string class that operates by reference count.
unsigned utilization(void) const
Determine fragmentation level of acquired heap pages.
void clear(void)
Purge all members and release pager member.
const char * operator[](unsigned item) const
Return specified member from pager list.
Directory pager is a paged string list for directory file names.
void assign(mempager &source)
Assign foreign pager to us.
StringPager::member stringlistitem_t
A convenience type for paged string list items.
A base class for reference counted objects.
A redirection base class for the memory protocol.
const char * get(unsigned item) const
Get string item from list.
virtual void * _alloc(size_t size)
Allocate memory from the pager heap.
bool load(const char *path)
Load a directory path.
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.
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.
unsigned utilization(void)
Determine fragmentation level of acquired heap pages.
void assign(StringPager &source)
Assign foreign pager to us.
void purge(void)
Purge all allocated memory and heap pages immediately.
virtual void * _alloc(size_t size)
Allocate memory from the pager heap.
StringPager(size_t pagesize=256)
Create a pager with a maximum page size.
unsigned max(void) const
Get the maximum number of pages that are permitted.
~autorelease()
Destroy an autorelease pool and delete member objects.
void add(const char *text)
Add text to list.
Various miscellaneous platform specific headers and defines.
void operator+=(LinkedObject *object)
Add a linked object to the autorelease pool.
Common namespace for all ucommon objects.
mempager(size_t page=0)
Construct a memory pager.
String pager for storing lists of NULL terminated strings.
A managed private heap for small allocations.
A smart pointer template for iterating linked lists.
virtual bool filter(char *text, size_t size)
Filter text in a derived class.
This is a base class for objects that may be created in pager pools.
void operator+=(const char *text)
Convenience operator to add to pager and auto-sort.
Abstract interfaces and support.
DirPager dirlist_t
A convenience type for using DirPager directly.
pager(mempager *heap=NULL)
Construct a pager and optionally assign a private pager heap.
void release(void)
Destroy an autorelease pool and delete member objects.
void push(char **text)
Add text list to front of list.
virtual void _unlock(void)
Unlock the memory pager mutex.
char ** list(void)
Gather index list.
Mempager managed type factory for pager pool objects.
virtual ~mempager()
Destroy a memory pager.
void release(void)
Release a pager object reference.
virtual ~memalloc()
Destroy a memory pager.
StringPager::member * begin(void) const
Get root of pager list.
PagerObject()
Create a pager object.
A memory protocol pager for private heap manager.
void push(const char *text)
Add text to front of list.
void add(char **list)
Add list to list.
StringPager & operator<<(const char *text)
Convenience operator to add to pager.
A common string class and character string support functions.