C/C++ Reference
JSerializer.h
00001 /*
00002  *     ____             _________                __                _     
00003  *    / __ \___  ____ _/ /_  __(_)___ ___  ___  / /   ____  ____ _(_)____
00004  *   / /_/ / _ \/ __ `/ / / / / / __ `__ \/ _ \/ /   / __ \/ __ `/ / ___/
00005  *  / _, _/  __/ /_/ / / / / / / / / / / /  __/ /___/ /_/ / /_/ / / /__  
00006  * /_/ |_|\___/\__,_/_/ /_/ /_/_/ /_/ /_/\___/_____/\____/\__, /_/\___/  
00007  *                                                       /____/          
00008  *
00009  *                  Barracuda Embedded Web-Server
00010  *
00011  ****************************************************************************
00012  *                            HEADER
00013  *
00014  *   $Id: JSerializer.h 2648 2012-04-26 20:27:21Z wini $
00015  *
00016  *   COPYRIGHT:  Real Time Logic LLC, 2006-2008
00017  *
00018  *   This software is copyrighted by and is the sole property of Real
00019  *   Time Logic LLC.  All rights, title, ownership, or other interests in
00020  *   the software remain the property of Real Time Logic LLC.  This
00021  *   software may only be used in accordance with the terms and
00022  *   conditions stipulated in the corresponding license agreement under
00023  *   which the software has been supplied.  Any unauthorized use,
00024  *   duplication, transmission, distribution, or disclosure of this
00025  *   software is expressly forbidden.
00026  *                                                                        
00027  *   This Copyright notice may not be removed or modified without prior
00028  *   written consent of Real Time Logic LLC.
00029  *                                                                         
00030  *   Real Time Logic LLC. reserves the right to modify this software
00031  *   without notice.
00032  *
00033  *               http://www.realtimelogic.com
00034  ****************************************************************************
00035  *
00036  */
00037 
00038 #ifndef __JSerializer_h
00039 #define __JSerializer_h
00040 
00041 #include "JVal.h"
00042 #include "BufPrint.h"
00043 
00053 typedef struct JSerializer
00054 {
00055 #ifdef __cplusplus
00056 
00058       JSerializer(JErr* err, BufPrint* out);
00059       ~JSerializer();
00060 
00063       int setInt(S32 val);
00064 
00067       int setLong(S64 val);
00068 #ifndef NO_DOUBLE
00069 
00072       int setDouble(double val);
00073 #endif
00074 
00078       int setString(const char* val);
00079 
00085       int fmtString(const char* fmt,...);
00086 
00090       int vFmtString(const char* fmt,va_list argList);
00091 
00094       int setBoolean(bool val);
00095 
00098       int setNull();
00099 
00102       int setJV(struct JVal* val, bool iterateNext=false);
00103 
00141       int set(const char* fmt, ...);
00142 
00148       int setMemberName(const char* name);
00149 
00161       int beginObject();
00162 
00165       int endObject();
00166 
00169       int beginArray();
00170 
00173       int endArray();
00174 
00177       JErr* getErr();
00178 
00181       int flush();
00182 
00185       int commit();
00186 
00189       BufPrint* getBufPrint();
00190 
00191 #endif
00192       JErr* err;
00193       struct
00194       {
00195             S32 level;
00196             U8 data[64];
00197       }objectStack;
00198       BufPrint* out;
00199       BaBool objectMember;
00200       BaBool startNewObj;
00201 } JSerializer;
00202 #ifdef __cplusplus
00203 extern "C" {
00204 #endif
00205 BA_API void JSerializer_constructor(JSerializer* o, JErr* err, BufPrint* out);
00206 #define JSerializer_destructor(o) JSerializer_flush(o)
00207 BA_API int JSerializer_flush(JSerializer* o);
00208 BA_API int JSerializer_commit(JSerializer* o);
00209 #define JSerializer_getErr(o) (o)->err
00210 BA_API int JSerializer_setInt(JSerializer* o, S32 val);
00211 BA_API int JSerializer_setLong(JSerializer* o, S64 val);
00212 #ifdef NO_DOUBLE
00213 #define JSerializer_setDouble JSerializer_setInt
00214 #else
00215 BA_API int JSerializer_setDouble(JSerializer* o, double val);
00216 #endif
00217 
00218 BA_API int JSerializer_fmtString(JSerializer* o, const char* fmt,...);
00219 BA_API int JSerializer_vFmtString(
00220    JSerializer* o, const char* fmt,va_list argList);
00221 BA_API int JSerializer_setString(JSerializer* o, const char* val);
00222 BA_API int JSerializer_setBoolean(JSerializer* o, BaBool val);
00223 BA_API int JSerializer_setNull(JSerializer* o);
00224 BA_API int JSerializer_setJV(
00225    JSerializer* o, struct JVal* val, BaBool iterateNext);
00226 BA_API int JSerializer_vSetJV(
00227    JSerializer* o,const char** fmt,va_list* argList);
00228 BA_API int JSerializer_set(JSerializer* o, const char* fmt, ...);
00229 BA_API int JSerializer_setMemberName(JSerializer* o, const char* name);
00230 BA_API int JSerializer_beginObject(JSerializer* o);
00231 BA_API int JSerializer_endObject(JSerializer* o);
00232 BA_API int JSerializer_beginArray(JSerializer* o);
00233 BA_API int JSerializer_endArray(JSerializer* o);
00234 #define JSerializer_getBufPrint(o) (o)->out
00235 #ifdef __cplusplus
00236 }
00237 inline JSerializer::JSerializer(JErr* err, BufPrint* out) {
00238    JSerializer_constructor(this,err, out); }
00239 inline JSerializer::~JSerializer() {
00240    JSerializer_destructor(this); }
00241 inline int JSerializer::setInt(S32 val) {
00242    return  JSerializer_setInt(this, val); }
00243 inline int JSerializer::setLong(S64 val) {
00244    return  JSerializer_setLong(this, val); }
00245 #ifndef NO_DOUBLE
00246 inline int JSerializer::setDouble(double val) {
00247    return  JSerializer_setDouble(this, val); }
00248 #endif
00249 inline int JSerializer::fmtString(const char* fmt,...) {
00250    int retv; va_list argList;
00251    va_start(argList, fmt); 
00252    retv = JSerializer_fmtString(this, fmt, argList);
00253    va_end(argList);
00254    return retv;
00255 }
00256 inline int JSerializer::vFmtString(const char* fmt,va_list argList) {
00257    return JSerializer_vFmtString(this, fmt, argList); }
00258 inline int JSerializer::setString(const char* val) {
00259    return  JSerializer_setString(this, val); }
00260 inline int JSerializer::setBoolean(bool val) {
00261    return  JSerializer_setBoolean(this, val ? TRUE : FALSE); }
00262 inline int JSerializer::setNull() {
00263    return  JSerializer_setNull(this); }
00264 inline int JSerializer::setJV(struct JVal* val, bool iterateNext) {
00265    return  JSerializer_setJV(this,val,iterateNext?TRUE:FALSE); }
00266 inline int JSerializer::set(const char* fmt, ...) {
00267    int retv; va_list argList;
00268    va_start(argList, fmt); 
00269    retv=JSerializer_vSetJV(this,&fmt,&argList);
00270    va_end(argList);
00271    return retv;
00272 }
00273 inline int JSerializer::setMemberName(const char* name) {
00274    return  JSerializer_setMemberName(this, name); }
00275 inline int JSerializer::beginObject() {
00276    return  JSerializer_beginObject(this); }
00277 inline int JSerializer::endObject() {
00278    return  JSerializer_endObject(this); }
00279 inline int JSerializer::beginArray() {
00280    return  JSerializer_beginArray(this); }
00281 inline int JSerializer::endArray() {
00282    return  JSerializer_endArray(this); }
00283 inline JErr* JSerializer::getErr() {
00284    return JSerializer_getErr(this); }
00285 inline int JSerializer::flush() {
00286    return JSerializer_flush(this); }
00287 inline int JSerializer::commit() {
00288    return JSerializer_commit(this); }
00289 inline BufPrint* JSerializer::getBufPrint() {
00290    return JSerializer_getBufPrint(this); }
00291 #endif
00292  /* end of JSON */ 
00294 
00295 #endif