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