source: cpp/frams/vm/classes/collectionobj.h @ 171

Last change on this file since 171 was 171, checked in by sz, 10 years ago

getObjectTarget is now the recommended way to retrieve object from ExtValue?, can post the standard warning message about missing object

  • Property svn:eol-style set to native
File size: 2.8 KB
Line 
1// This file is a part of the Framsticks GDK.
2// Copyright (C) 2002-2014  Maciej Komosinski and Szymon Ulatowski.  See LICENSE.txt for details.
3// Refer to http://www.framsticks.com/ for further information.
4
5#ifndef _COLLECTIONOBJ_H_
6#define _COLLECTIONOBJ_H_
7
8#include <frams/param/param.h>
9#include <frams/util/extvalue.h>
10#include <frams/util/hashtable.h>
11#include <frams/util/3d.h>
12
13/** object collection, indexed by int */
14class VectorObject: public DestrBase
15{
16  public:
17SList data;
18unsigned int readonly:1, owndata:1;
19void clear();
20ExtValue *get(int i) {return (ExtValue*)data.get(i);}
21void set(int i,const ExtValue& val);
22
23static Param par;
24VectorObject(Pt3D& pt);
25VectorObject():readonly(0),owndata(1) {}
26~VectorObject() {clear();}
27#define STATRICKCLASS VectorObject
28PARAMPROCDEF(p_clear) {if (readonly) return; clear();}
29PARAMGETDEF(size) {arg1->setInt(data.size());}
30PARAMGETDEF(avg);
31PARAMGETDEF(stdev);
32PARAMGETDEF(iterator);
33PARAMPROCDEF(p_remove);
34PARAMPROCDEF(p_get);
35PARAMPROCDEF(p_find);
36PARAMPROCDEF(p_set) {if (!readonly) set(arg1[1].getInt(),arg1[0]);}
37PARAMPROCDEF(p_add) {if (readonly) return; /*ExtValue tmp; get_toString(&tmp); printf("%s += %s",(const char*)tmp.getString(),(const char*)arg1[0].getString());*/ data+=new ExtValue(arg1[0]); /*get_toString(&tmp); printf(" -> %s\n",(const char*)tmp.getString());*/ arg2->setInt(data.size()-1);}
38PARAMGETDEF(toString);
39PARAMPROCDEF(p_sort);
40#undef STATRICKCLASS
41static void p_new(void*,ExtValue*args,ExtValue*ret)
42        {ret->setObject(ExtObject(&par,new VectorObject));}
43SString serialize() const;
44ExtObject makeObject() {return ExtObject(&par,this);}
45
46static VectorObject* fromObject(const ExtObject& o, bool warn=true);
47};
48
49/** object collection, indexed by name */
50class DictionaryObject: public DestrBase
51{
52  public:
53HashTable hash;
54HashEntryIterator it;
55int it_index;
56
57void clear();
58HashEntryIterator* getIndexIterator(int i);
59
60static Param par;
61DictionaryObject():it(hash),it_index(-1) {}
62~DictionaryObject() {clear();}
63#define STATRICKCLASS DictionaryObject
64PARAMPROCDEF(p_clear) {clear();}
65PARAMGETDEF(size) {arg1->setInt(hash.getSize());}
66PARAMPROCDEF(p_remove);
67PARAMPROCDEF(p_get);
68PARAMPROCDEF(p_getKey);
69PARAMPROCDEF(p_set);
70PARAMPROCDEF(p_find);
71PARAMGETDEF(toString);
72#undef STATRICKCLASS
73SString serialize() const;
74static void p_new(void*,ExtValue*args,ExtValue*ret)
75        {ret->setObject(ExtObject(&par,new DictionaryObject));}
76static DictionaryObject* fromObject(const ExtObject& v, bool warn=true);
77ExtObject makeObject() {return ExtObject(&par,this);}
78};
79
80class VectorIterator: public DestrBase
81{
82  public:
83VectorObject *vec;
84int pos;
85VectorIterator(VectorObject* v);
86~VectorIterator();
87#define STATRICKCLASS VectorIterator
88PARAMGETDEF(next);
89PARAMGETDEF(value);
90#undef STATRICKCLASS
91static ExtObject makeFrom(VectorObject *v);
92};
93
94#endif
Note: See TracBrowser for help on using the repository browser.