The qDecoder Project

[svn] / releases / qDecoder-9.0.2 / examples / obstack.c

Parent Directory Parent Directory Revision Log Revision Log


Revision 498 - Download Blame
Mon Jan 4 22:18:29 2010 UTC (8 months ago) by wolkykim
File size: 2998 byte(s)
Renaming RB-9.0.2 to qDecoder-9.0.2
    1 /*
    2  * Copyright 2008 The qDecoder Project. All rights reserved.
    3  *
    4  * Redistribution and use in source and binary forms, with or without
    5  * modification, are permitted provided that the following conditions
    6  * are met:
    7  *
    8  * 1. Redistributions of source code must retain the above copyright
    9  *    notice, this list of conditions and the following disclaimer.
   10  * 2. Redistributions in binary form must reproduce the above copyright
   11  *    notice, this list of conditions and the following disclaimer in the
   12  *    documentation and/or other materials provided with the distribution.
   13  *
   14  * THIS SOFTWARE IS PROVIDED BY THE QDECODER PROJECT ``AS IS'' AND ANY
   15  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
   16  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
   17  * DISCLAIMED. IN NO EVENT SHALL THE QDECODER PROJECT BE LIABLE FOR ANY
   18  * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
   19  * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
   20  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
   21  * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
   22  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
   23  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
   24  */
   25 
   26 #include <stdio.h>
   27 #include <stdlib.h>
   28 #include <stdbool.h>
   29 #include "qDecoder.h"
   30 
   31 void stringSample(void) {
   32 	// get new obstack
   33 	Q_OBSTACK *obstack = qObstackInit();
   34 
   35 	// stack
   36 	qObstackGrowStr(obstack, "(string)");			// for string
   37 	qObstackGrowStrf(obstack, "(stringf:%s)", "hello");	// for formatted string
   38 	qObstackGrow(obstack, "(object)", sizeof("(object)"));	// same effects as above but this can be used for object or binary
   39 
   40 	// final
   41 	char *final = (char *)qObstackFinish(obstack);
   42 
   43 	// print out
   44 	printf("[String Sample]\n");
   45 	printf("Final string = %s\n", final);
   46 	printf("Total Size = %d, Number of Objects = %d\n", qObstackGetSize(obstack), qObstackGetNum(obstack));
   47 
   48 	// free obstack
   49 	qObstackFree(obstack);
   50 }
   51 
   52 void objectSample(void) {
   53 	// sample object
   54 	struct sampleobj {
   55 		int	num;
   56 		char	str[10];
   57 	} obj, *final;
   58 
   59 	// get new obstack
   60 	Q_OBSTACK *obstack = qObstackInit();
   61 
   62 	// stack
   63 	int i;
   64 	for(i = 0; i < 3; i++) {
   65 		// filling object with sample data
   66 		obj.num  = i;
   67 		sprintf(obj.str, "hello%d", i);
   68 
   69 		// stack
   70 		qObstackGrow(obstack, (void *)&obj, sizeof(struct sampleobj));
   71 	}
   72 
   73 	// final
   74 	final = (struct sampleobj *)qObstackFinish(obstack);
   75 
   76 	// print out
   77 	printf("[Object Sample]\n");
   78 	for(i = 0; i < qObstackGetNum(obstack); i++) {
   79 		printf("Object%d final = %d, %s\n", i+1, final[i].num, final[i].str);
   80 	}
   81 	printf("Total Size = %d, Number of Objects = %d\n", qObstackGetSize(obstack), qObstackGetNum(obstack));
   82 
   83 	// free obstack
   84 	qObstackFree(obstack);
   85 }
   86 
   87 int main(void) {
   88 	Q_ENTRY *req = qCgiRequestParse(NULL);
   89 	qCgiResponseSetContentType(req, "text/plain");
   90 
   91 	stringSample();
   92 	printf("\n");
   93 	objectSample();
   94 
   95 	return 0;
   96 }

Home | About | Examples | Changes | Download | SVN Repository | Install | Reference