![]() |
Functions | |
Q_OBSTACK * | qObstack (void) |
Initialize object-stack. | |
static bool | _grow (Q_OBSTACK *obstack, const void *object, size_t size) |
Q_OBSTACK->grow(): Stack object. | |
static bool | _growStr (Q_OBSTACK *obstack, const char *str) |
Q_OBSTACK->growStr(): Stack string. | |
static bool | _growStrf (Q_OBSTACK *obstack, const char *format,...) |
Q_OBSTACK->growStrf(): Stack formatted string. | |
static void * | _getFinal (Q_OBSTACK *obstack, size_t *size) |
Q_OBSTACK->getFinal(): Get merged single final object. | |
static ssize_t | _writeFinal (Q_OBSTACK *obstack, int nFd) |
Q_OBSTACK->writeFinal(): Write out merged final data to the file descriptor. | |
static size_t | _getSize (Q_OBSTACK *obstack) |
Q_OBSTACK->getSize(): Get stacked objects size. | |
static int | _getNum (Q_OBSTACK *obstack) |
Q_OBSTACK->getNum(): Get the number of stacked objects. | |
static bool | _free (Q_OBSTACK *obstack) |
Q_OBSTACK->free(): De-allocate obstack. |
An qObstack is a pool of memory containing a stack of objects. An qObstack can contain any number of objects of any size.
[Code sample - String] // get new obstack Q_OBSTACK *obstack = qObstack(); // stack obstack->growStr(obstack, "AB"); // no need to supply size obstack->growStrf(obstack, "%s", "CDE"); // for formatted string obstack->grow(obstack, "FGH", 3); // same effects as above but this can // be used for object or binary // final char *final = (char *)obstack->getFinal(obstack, NULL); // print out printf("Final string = %s\n", final); printf("Total Size = %d, Number of Objects = %d\n", obstack->getSize(obstack), obstack->getNum(obstack)); free(final); obstack->free(obstack); [Result] Final string = ABCDEFGH Total Size = 8, Number of Objects = 3
[Code sample - Object] struct sampleobj { int num; char str[10]; }; // get new obstack Q_OBSTACK *obstack = qObstack(); // stack int i; struct sampleobj obj; for(i = 0; i < 3; i++) { // filling object with sample data obj.num = i; sprintf(obj.str, "hello%d", i); // stack obstack->grow(obstack, (void *)&obj, sizeof(struct sampleobj)); } // final struct sampleobj *final = (struct sampleobj *)obstack->getFinal(obstack, NULL); // print out qContentType("text/plain"); for(i = 0; i < obstack->getNum(obstack); i++) { printf("Object%d final = %d, %s\n", i+1, final[i].num, final[i].str); } printf("Total Size = %d, Number of Objects = %d\n", obstack->getSize(obstack), obstack->getNum(obstack)); obstack->free(obstack); [Result] Object1 final = 0, hello0 Object2 final = 1, hello1 Object3 final = 2, hello2 Total Size = 48, Number of Objects = 3
Q_OBSTACK* qObstack | ( | void | ) |
static bool _grow | ( | Q_OBSTACK * | obstack, | |
const void * | object, | |||
size_t | size | |||
) | [static] |
Q_OBSTACK->grow(): Stack object.
obstack | a pointer of Q_OBSTACK | |
object | a pointer of object data | |
size | size of object |
static bool _growStr | ( | Q_OBSTACK * | obstack, | |
const char * | str | |||
) | [static] |
Q_OBSTACK->growStr(): Stack string.
obstack | a pointer of Q_OBSTACK | |
str | a pointer of string |
static bool _growStrf | ( | Q_OBSTACK * | obstack, | |
const char * | format, | |||
... | ||||
) | [static] |
Q_OBSTACK->growStrf(): Stack formatted string.
obstack | a pointer of Q_OBSTACK | |
format | string format |
static void* _getFinal | ( | Q_OBSTACK * | obstack, | |
size_t * | size | |||
) | [static] |
Q_OBSTACK->getFinal(): Get merged single final object.
obstack | a pointer of Q_OBSTACK | |
size | if size is not NULL, merged object size will be stored. |
static ssize_t _writeFinal | ( | Q_OBSTACK * | obstack, | |
int | nFd | |||
) | [static] |
Q_OBSTACK->writeFinal(): Write out merged final data to the file descriptor.
obstack | a pointer of Q_OBSTACK | |
nFd | a file descriptor for writing out. |
static size_t _getSize | ( | Q_OBSTACK * | obstack | ) | [static] |
Q_OBSTACK->getSize(): Get stacked objects size.
obstack | a pointer of Q_OBSTACK |
static int _getNum | ( | Q_OBSTACK * | obstack | ) | [static] |
Q_OBSTACK->getNum(): Get the number of stacked objects.
obstack | a pointer of Q_OBSTACK |
static bool _free | ( | Q_OBSTACK * | obstack | ) | [static] |
Q_OBSTACK->free(): De-allocate obstack.
obstack | a pointer of Q_OBSTACK |