source: cpp/frams/param/paramobj.h @ 350

Last change on this file since 350 was 333, checked in by Maciej Komosinski, 10 years ago
  • use source/code mapping for line number and file information in vm error messages
  • enum ExtValue::CompareResult? instead of int
  • Property svn:eol-style set to native
File size: 2.9 KB
RevLine 
[286]1// This file is a part of Framsticks SDK.  http://www.framsticks.com/
2// Copyright (C) 1999-2015  Maciej Komosinski and Szymon Ulatowski.
3// See LICENSE.txt for details.
[109]4
5#ifndef _PARAMOBJ_H_
6#define _PARAMOBJ_H_
7
8#include "param.h"
[326]9#include <frams/util/extvalue.h>
[109]10
[326]11class ParamObject : public DestrBase
[109]12{
[326]13        ParamObject(int _numfields, ParamEntry *_tab);
14public:
15        int numfields;
16        Param par;
[333]17#ifdef _MSC_VER
18#pragma warning(push)
19#pragma warning(disable: 4200) //Cannot generate copy-ctor or copy-assignment operator when UDT contains a zero-sized array
20#endif
[326]21        ExtValue fields[0];
[333]22#ifdef _MSC_VER
23#pragma warning(pop)
24#endif
[326]25        ParamObject() { numfields = 0; }
26        ~ParamObject();
[109]27
[326]28        void* operator new(size_t s, int numfields){ return ::operator new(s + sizeof(ExtValue)*numfields); }
29        void* operator new(size_t s){ return ::operator new(s); }
[333]30        void operator delete(void* ptr, int numfields) { ::operator delete(ptr); }
31        void operator delete(void* ptr) { ::operator delete(ptr); }
[326]32        ParamObject *clone();
33        static void p_new(void* obj, ExtValue *args, ExtValue *ret);
[109]34
[326]35        void operator=(const ParamObject& src);
[109]36
[326]37        static int firstFieldOffset();
[109]38
[326]39        /** make a ParamEntry* array for use with Param object.
40                offsets in the array are calculated for the ExtObject array as the target.
41                valid array can be created with makeObject().
42                sample code:
43                @code
44                ParamInterface *pi=...; // any param interface
45                ParamEntry *tab=ParamObject::makeParamTab(pi);
46                void* obj=ParamObject::makeObject(tab);
47                void* obj2=ParamObject::makeObject(tab);
48                Param par(tab,obj);
49                par.set(...), par.get(...), par.load(...), par.save(...);
50                par.select(obj);
51                par.select(obj2);
52                ParamObject::freeObject(obj);
53                ParamObject::freeObject(obj2);
54                */
55        static ParamEntry* makeParamTab(ParamInterface *pi, bool stripgroups = 0, bool stripproc = 0, int firstprop = 0, int maxprops = 9999, bool dupentries = false, int flagsexclude = 0, bool addnew = false, const char* rename = NULL);
[109]56
[326]57        /** deallocate paramtab obtained from makeParamTab() */
58        static void freeParamTab(ParamEntry *pe);
[109]59
[326]60        static void setParamTabText(ParamEntry *pe, const char* &ptr, const char* txt);
61        static bool paramTabAllocatedString(ParamEntry *pe);
62        static bool paramTabEqual(ParamEntry *pe1, ParamEntry *pe2);
63
64        /** @return the object, suitable for Param.select(...).
65                @return NULL if 'pi' has no usable properties */
66        static ParamObject* makeObject(ParamEntry *tab);
67
68        /** copy data from src to dst (compatibility with older implementation), same as operator=  */
69        static void copyObject(void* dst, void* src);
70
71        /** duplicate object (compatibility with older implementation), same as clone()  */
72        static void* dupObject(void* obj);
73
74        /** delete all data in the array and deallocate it (compatibility with older implementation), same as delete */
75        static void freeObject(void* obj);
[109]76};
77
[326]78class ParamTabOwner
79{
80public:
81        ParamEntry *pe;
82        ParamTabOwner(ParamEntry *_pe) :pe(_pe) {}
83        ~ParamTabOwner() { ParamObject::freeParamTab(pe); }
84};
85
[109]86#endif
Note: See TracBrowser for help on using the repository browser.