Ignore:
Timestamp:
07/23/13 18:15:30 (11 years ago)
Author:
sz
Message:

introducing object de/serialization - see serialtest.cpp
the core GDK classes can be now used in multiple threads (ifdef MULTITHREADED)

File:
1 edited

Legend:

Unmodified
Added
Removed
  • cpp/gdk/multiparamload.h

    r74 r104  
    99#include "param.h"
    1010#include "virtfile.h"
     11#include "extvalue.h"
    1112
    1213/** This is the general "framsticks-format" file parser for loading multiple objects.
     
    3738SListTempl<VirtFILE*> filestack;
    3839char ownfile;
    39 SList params;
     40PtrListTempl<ExtObject*> objects;
    4041int status;
    4142SString lasterror, lastcomment, lastunknown;
    42 ParamInterface *lastclass;
     43ExtObject lastobject;
    4344int breakcond;
    4445Param emptyparam;
    4546
    4647void init();
    47 void load();
    4848
    4949int maybeBreak(int cond)
     
    5858MultiParamLoader(const char* filename) {init(); load(filename);}
    5959
    60 ~MultiParamLoader() {abort();}
     60~MultiParamLoader() {abort();clearObjects();}
    6161
    6262void reset();
    6363
     64void load(); //< use previously opened file
    6465void load(VirtFILE *f);
    6566void load(const char* filename);
     
    6970    Note that registered classes will only work when the record name matches the class name, otherwise breakOn(BeforeUnknown) must be used and then getClassName() to check for the expected record.
    7071 */
    71 void addClass(ParamInterface *pi) {params+=pi;}
    72 void removeClass(ParamInterface *pi) {params-=pi;}
    73 void clearClasses() {params.clear();}
     72void addObject(ParamInterface *pi) {objects+=new ExtObject(pi);}
     73void removeObject(ParamInterface *pi) {removeObject(ExtObject(pi));}
     74void addObject(const ExtObject &o) {objects+=new ExtObject(o);}
     75void removeObject(const ExtObject &o);
     76int findObject(const ExtObject &o);
     77void clearObjects();
    7478
    7579/** To be used in the main loop: while(event=loader.go()) { ... }
     
    107111
    108112/** Can be used BeforeObject and AfterObject */
    109 ParamInterface *getClass() {return lastclass;}
     113ExtObject &getObject() {return lastobject;}
    110114/** Can be used BeforeUnknown, BeforeObject, AfterObject */
    111 const SString& getClassName() {return lastunknown;}
    112 const void setClassName(SString n) {lastunknown=n;}
     115const SString& getObjectName() {return lastunknown;}
     116const void setObjectName(SString n) {lastunknown=n;}
    113117/** Unknown object will be loaded if you set its class BeforeUnknown */
    114 void setClass(ParamInterface *pi) {lastclass=pi;}
     118void setObject(ParamInterface *pi) {lastobject=ExtObject(pi);}
     119void setObject(const ExtObject& o) {lastobject=o;}
    115120/** Can be used OnComment */
    116121const SString& getComment() {return lastcomment;}
     
    118123const SString& getError() {return lasterror;}
    119124/** Can be used BeforeObject and BeforeUnknown */
    120 int loadObjectNow(ParamInterface *pi);
     125int loadObjectNow(ParamInterface *pi) {return loadObjectNow(ExtObject(pi));}
     126int loadObjectNow(const ExtObject &o);
    121127/** Can be used BeforeObject */
    122 int loadObjectNow() {return loadObjectNow(getClass());}
     128int loadObjectNow() {return loadObjectNow(getObject());}
    123129/** Can be used BeforeObject and BeforeUnknown.
    124130    Object data will not be loaded. */
Note: See TracChangeset for help on using the changeset viewer.