Welcome to mirror list, hosted at ThFree Co, Russian Federation.

scriptany.h « scriptany « add_on « angelscript « Scripting « Source - github.com/WolfireGames/overgrowth.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
blob: 289023e0cfc11eebaad0369df5f2adfee861e315 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
#ifndef SCRIPTANY_H
#define SCRIPTANY_H

#ifndef ANGELSCRIPT_H
// Avoid having to inform include path if header is already include before
#include <angelscript.h>
#endif

BEGIN_AS_NAMESPACE

class CScriptAny {
   public:
    // Constructors
    CScriptAny(asIScriptEngine *engine);
    CScriptAny(void *ref, int refTypeId, asIScriptEngine *engine);

    // Memory management
    int AddRef() const;
    int Release() const;

    // Copy the stored value from another any object
    CScriptAny &operator=(const CScriptAny &);
    int CopyFrom(const CScriptAny *other);

    // Store the value, either as variable type, integer number, or real number
    void Store(void *ref, int refTypeId);
    void Store(asINT64 &value);
    void Store(double &value);

    // Retrieve the stored value, either as variable type, integer number, or real number
    bool Retrieve(void *ref, int refTypeId) const;
    bool Retrieve(asINT64 &value) const;
    bool Retrieve(double &value) const;

    // Get the type id of the stored value
    int GetTypeId() const;

    // GC methods
    int GetRefCount();
    void SetFlag();
    bool GetFlag();
    void EnumReferences(asIScriptEngine *engine);
    void ReleaseAllHandles(asIScriptEngine *engine);

   protected:
    virtual ~CScriptAny();
    void FreeObject();

    mutable int refCount;
    mutable bool gcFlag;
    asIScriptEngine *engine;

    // The structure for holding the values
    struct valueStruct {
        union {
            asINT64 valueInt;
            double valueFlt;
            void *valueObj;
        };
        int typeId;
    };

    valueStruct value;
};

void RegisterScriptAny(asIScriptEngine *engine);
void RegisterScriptAny_Native(asIScriptEngine *engine);
void RegisterScriptAny_Generic(asIScriptEngine *engine);

END_AS_NAMESPACE

#endif