LMMS
Loading...
Searching...
No Matches
juce_Variant.h
Go to the documentation of this file.
1/*
2 ==============================================================================
3
4 This file is part of the JUCE library.
5 Copyright (c) 2022 - Raw Material Software Limited
6
7 JUCE is an open source library subject to commercial or open-source
8 licensing.
9
10 The code included in this file is provided under the terms of the ISC license
11 http://www.isc.org/downloads/software-support-policy/isc-license. Permission
12 To use, copy, modify, and/or distribute this software for any purpose with or
13 without fee is hereby granted provided that the above copyright notice and
14 this permission notice appear in all copies.
15
16 JUCE IS PROVIDED "AS IS" WITHOUT ANY WARRANTY, AND ALL WARRANTIES, WHETHER
17 EXPRESSED OR IMPLIED, INCLUDING MERCHANTABILITY AND FITNESS FOR PURPOSE, ARE
18 DISCLAIMED.
19
20 ==============================================================================
21*/
22
23namespace juce
24{
25
26//==============================================================================
42{
43public:
44 //==============================================================================
49 {
50 NativeFunctionArgs (const var& thisObject, const var* args, int numArgs) noexcept;
51
53 const var* arguments;
55 };
56
57 using NativeFunction = std::function<var (const NativeFunctionArgs&)>;
58
59 //==============================================================================
61 var() noexcept;
62
64 ~var() noexcept;
65
66 var (const var& valueToCopy);
67 var (int value) noexcept;
69 var (bool value) noexcept;
70 var (double value) noexcept;
71 var (const char* value);
72 var (const wchar_t* value);
78 var (const void* binaryData, size_t dataSize);
79 var (const MemoryBlock& binaryData);
80
81 var& operator= (const var& valueToCopy);
82 var& operator= (int value);
83 var& operator= (int64 value);
84 var& operator= (bool value);
85 var& operator= (double value);
86 var& operator= (const char* value);
87 var& operator= (const wchar_t* value);
88 var& operator= (const String& value);
89 var& operator= (const MemoryBlock& value);
90 var& operator= (const Array<var>& value);
91 var& operator= (ReferenceCountedObject* object);
92 var& operator= (NativeFunction method);
93
94 var (var&&) noexcept;
95 var (String&&);
96 var (MemoryBlock&&);
97 var (Array<var>&&);
98 var& operator= (var&&) noexcept;
99 var& operator= (String&&);
100
101 void swapWith (var& other) noexcept;
102
104 static var undefined() noexcept;
105
106 //==============================================================================
107 operator int() const noexcept;
108 operator int64() const noexcept;
109 operator bool() const noexcept;
110 operator float() const noexcept;
111 operator double() const noexcept;
112 operator String() const;
114
122
130
133
134 //==============================================================================
135 bool isVoid() const noexcept;
137 bool isInt() const noexcept;
138 bool isInt64() const noexcept;
139 bool isBool() const noexcept;
140 bool isDouble() const noexcept;
141 bool isString() const noexcept;
142 bool isObject() const noexcept;
143 bool isArray() const noexcept;
145 bool isMethod() const noexcept;
146
163 bool equals (const var& other) const noexcept;
164
170
172 bool hasSameTypeAs (const var& other) const noexcept;
173
179
180 //==============================================================================
184 int size() const;
185
193 const var& operator[] (int arrayIndex) const;
194
202 var& operator[] (int arrayIndex);
203
211 void append (const var& valueToAppend);
212
220 void insert (int index, const var& value);
221
227 void remove (int index);
228
235 void resize (int numArrayElementsWanted);
236
241 int indexOf (const var& value) const;
242
243 //==============================================================================
245 const var& operator[] (const Identifier& propertyName) const;
247 const var& operator[] (const char* propertyName) const;
250 var getProperty (const Identifier& propertyName, const var& defaultReturnValue) const;
252 bool hasProperty (const Identifier& propertyName) const noexcept;
253
261 var call (const Identifier& method, const var& arg1, const var& arg2, const var& arg3);
263 var call (const Identifier& method, const var& arg1, const var& arg2, const var& arg3, const var& arg4) const;
265 var call (const Identifier& method, const var& arg1, const var& arg2, const var& arg3, const var& arg4, const var& arg5) const;
267 var invoke (const Identifier& method, const var* arguments, int numArguments) const;
270
271 //==============================================================================
276 void writeToStream (OutputStream& output) const;
277
283 static var readFromStream (InputStream& input);
284
285 //==============================================================================
286 #if JUCE_ALLOW_STATIC_NULL_VARIABLES && ! defined (DOXYGEN)
287 [[deprecated ("This was a static empty var object, but is now deprecated as it's too easy to accidentally "
288 "use it indirectly during a static constructor leading to hard-to-find order-of-initialisation "
289 "problems. Use var() or {} instead. For returning an empty var from a function by reference, "
290 "use a function-local static var and return that.")]]
291 static const var null;
292 #endif
293
294private:
295 //==============================================================================
296 struct VariantType;
297 struct Instance;
298
310
311 friend bool canCompare (const var&, const var&);
312
315
317 var (const VariantType&) noexcept;
318
319 // This is needed to prevent the wrong constructor/operator being called
320 var (const ReferenceCountedObject*) = delete;
321 var& operator= (const ReferenceCountedObject*) = delete;
322 var (const void*) = delete;
323 var& operator= (const void*) = delete;
324};
325
327JUCE_API bool operator== (const var&, const var&);
329JUCE_API bool operator!= (const var&, const var&);
331JUCE_API bool operator< (const var&, const var&);
333JUCE_API bool operator<= (const var&, const var&);
335JUCE_API bool operator> (const var&, const var&);
337JUCE_API bool operator>= (const var&, const var&);
338
339JUCE_API bool operator== (const var&, const String&);
340JUCE_API bool operator!= (const var&, const String&);
341JUCE_API bool operator== (const var&, const char*);
342JUCE_API bool operator!= (const var&, const char*);
343
344//==============================================================================
349template <typename Type>
351{
352 static Type fromVar (const var& v) { return static_cast<Type> (v); }
353 static var toVar (const Type& t) { return t; }
354};
355
356#ifndef DOXYGEN
357template <>
359{
360 static String fromVar (const var& v) { return v.toString(); }
361 static var toVar (const String& s) { return s; }
362};
363#endif
364
365} // namespace juce
#define noexcept
Definition DistrhoDefines.h:72
Definition juce_Array.h:56
Definition juce_DynamicObject.h:40
Definition juce_Identifier.h:39
Definition juce_InputStream.h:37
Definition juce_MemoryBlock.h:33
Definition juce_OutputStream.h:38
Definition juce_ReferenceCountedObject.h:66
Definition juce_StringArray.h:35
Definition juce_String.h:53
Definition juce_Variant.h:42
static var undefined() noexcept
Definition juce_Variant.cpp:550
bool isMethod() const noexcept
Definition juce_Variant.cpp:563
var(const ReferenceCountedObject *)=delete
void insert(int index, const var &value)
Definition juce_Variant.cpp:814
DynamicObject * getDynamicObject() const noexcept
Definition juce_Variant.cpp:575
bool isString() const noexcept
Definition juce_Variant.cpp:559
int size() const
Definition juce_Variant.cpp:759
var invoke(const Identifier &method, const var *arguments, int numArguments) const
Definition juce_Variant.cpp:716
void writeToStream(OutputStream &output) const
Definition juce_Variant.cpp:833
Array< var > * convertToArray()
Definition juce_Variant.cpp:789
var() noexcept
Definition juce_Variant.cpp:509
ReferenceCountedObject * getObject() const noexcept
Definition juce_Variant.cpp:572
Array< var > * getArray() const noexcept
Definition juce_Variant.cpp:573
int indexOf(const var &value) const
Definition juce_Variant.cpp:824
std::function< var(const NativeFunctionArgs &)> NativeFunction
Definition juce_Variant.h:57
const VariantType * type
Definition juce_Variant.h:313
NativeFunction getNativeFunction() const
Definition juce_Variant.cpp:711
bool hasProperty(const Identifier &propertyName) const noexcept
Definition juce_Variant.cpp:703
bool isObject() const noexcept
Definition juce_Variant.cpp:560
static var readFromStream(InputStream &input)
Definition juce_Variant.cpp:838
void swapWith(var &other) noexcept
Definition juce_Variant.cpp:578
bool isVoid() const noexcept
Definition juce_Variant.cpp:553
bool isBinaryData() const noexcept
Definition juce_Variant.cpp:562
bool isInt64() const noexcept
Definition juce_Variant.cpp:556
String toString() const
Definition juce_Variant.cpp:570
void append(const var &valueToAppend)
Definition juce_Variant.cpp:803
bool isBool() const noexcept
Definition juce_Variant.cpp:557
bool equals(const var &other) const noexcept
Definition juce_Variant.cpp:634
bool equalsWithSameType(const var &other) const noexcept
Definition juce_Variant.cpp:639
void resize(int numArrayElementsWanted)
Definition juce_Variant.cpp:819
bool isDouble() const noexcept
Definition juce_Variant.cpp:558
bool isInt() const noexcept
Definition juce_Variant.cpp:555
bool isArray() const noexcept
Definition juce_Variant.cpp:561
var getProperty(const Identifier &propertyName, const var &defaultReturnValue) const
Definition juce_Variant.cpp:695
void remove(int index)
Definition juce_Variant.cpp:808
var(const void *)=delete
bool isUndefined() const noexcept
Definition juce_Variant.cpp:554
var call(const Identifier &method) const
Definition juce_Variant.cpp:724
friend bool canCompare(const var &, const var &)
Definition juce_Variant.cpp:649
bool hasSameTypeAs(const var &other) const noexcept
Definition juce_Variant.cpp:644
ValueUnion value
Definition juce_Variant.h:314
var clone() const noexcept
Definition juce_Variant.cpp:676
MemoryBlock * getBinaryData() const noexcept
Definition juce_Variant.cpp:574
struct huft * t
Definition inflate.c:943
unsigned v[N_MAX]
Definition inflate.c:1584
unsigned s
Definition inflate.c:1555
#define JUCE_API
Definition juce_StandardHeader.h:152
Definition carla_juce.cpp:31
long long int64
Definition juce_MathsFunctions.h:54
static String fromVar(const var &v)
Definition juce_Variant.h:360
static var toVar(const String &s)
Definition juce_Variant.h:361
Definition juce_Variant.h:351
static var toVar(const Type &t)
Definition juce_Variant.h:353
static Type fromVar(const var &v)
Definition juce_Variant.h:352
Definition juce_Variant.cpp:482
Definition juce_Variant.h:49
int numArguments
Definition juce_Variant.h:54
const var & thisObject
Definition juce_Variant.h:52
NativeFunctionArgs(const var &thisObject, const var *args, int numArgs) noexcept
Definition juce_Variant.cpp:891
const var * arguments
Definition juce_Variant.h:53
Definition juce_Variant.cpp:41
Definition juce_Variant.h:300
MemoryBlock * binaryValue
Definition juce_Variant.h:307
bool boolValue
Definition juce_Variant.h:303
char stringValue[sizeof(String)]
Definition juce_Variant.h:305
int64 int64Value
Definition juce_Variant.h:302
int intValue
Definition juce_Variant.h:301
NativeFunction * methodValue
Definition juce_Variant.h:308
ReferenceCountedObject * objectValue
Definition juce_Variant.h:306
double doubleValue
Definition juce_Variant.h:304
static ZCONST char Far * method[NUM_METHODS]
Definition zipinfo.c:1008
#define const
Definition zconf.h:137