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