openshot-audio  0.1.7
juce_Variant.h
Go to the documentation of this file.
1 /*
2  ==============================================================================
3 
4  This file is part of the juce_core module of the JUCE library.
5  Copyright (c) 2015 - ROLI Ltd.
6 
7  Permission to use, copy, modify, and/or distribute this software for any purpose with
8  or without fee is hereby granted, provided that the above copyright notice and this
9  permission notice appear in all copies.
10 
11  THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD
12  TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN
13  NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
14  DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER
15  IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
16  CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
17 
18  ------------------------------------------------------------------------------
19 
20  NOTE! This permissive ISC license applies ONLY to files within the juce_core module!
21  All other JUCE modules are covered by a dual GPL/commercial license, so if you are
22  using any other modules, be sure to check that you also comply with their license.
23 
24  For more details, visit www.juce.com
25 
26  ==============================================================================
27 */
28 
29 #ifndef JUCE_VARIANT_H_INCLUDED
30 #define JUCE_VARIANT_H_INCLUDED
31 
32 
33 //==============================================================================
47 {
48 public:
49  //==============================================================================
54  {
55  NativeFunctionArgs (const var& thisObject, const var* args, int numArgs) noexcept;
56 
57  const var& thisObject;
58  const var* arguments;
60 
62  };
63 
64  typedef var (*NativeFunction) (const NativeFunctionArgs&);
65 
66  //==============================================================================
68  var() noexcept;
69 
71  ~var() noexcept;
72 
74  static const var null;
75 
76  var (const var& valueToCopy);
77  var (int value) noexcept;
78  var (int64 value) noexcept;
79  var (bool value) noexcept;
80  var (double value) noexcept;
81  var (const char* value);
82  var (const wchar_t* value);
83  var (const String& value);
84  var (const Array<var>& value);
85  var (ReferenceCountedObject* object);
86  var (NativeFunction method) noexcept;
87  var (const void* binaryData, size_t dataSize);
88  var (const MemoryBlock& binaryData);
89 
90  var& operator= (const var& valueToCopy);
91  var& operator= (int value);
92  var& operator= (int64 value);
93  var& operator= (bool value);
94  var& operator= (double value);
95  var& operator= (const char* value);
96  var& operator= (const wchar_t* value);
97  var& operator= (const String& value);
98  var& operator= (const Array<var>& value);
99  var& operator= (ReferenceCountedObject* object);
100  var& operator= (NativeFunction method);
101 
102  #if JUCE_COMPILER_SUPPORTS_MOVE_SEMANTICS
103  var (var&& other) noexcept;
104  var (String&& value);
105  var (MemoryBlock&& binaryData);
106  var (Array<var>&& value);
107  var& operator= (var&& other) noexcept;
108  var& operator= (String&& value);
109  #endif
110 
111  void swapWith (var& other) noexcept;
112 
114  static var undefined() noexcept;
115 
116  //==============================================================================
117  operator int() const noexcept;
118  operator int64() const noexcept;
119  operator bool() const noexcept;
120  operator float() const noexcept;
121  operator double() const noexcept;
122  operator String() const;
123  String toString() const;
124 
131  Array<var>* getArray() const noexcept;
132 
139  MemoryBlock* getBinaryData() const noexcept;
140 
141  ReferenceCountedObject* getObject() const noexcept;
142  DynamicObject* getDynamicObject() const noexcept;
143 
144  //==============================================================================
145  bool isVoid() const noexcept;
146  bool isUndefined() const noexcept;
147  bool isInt() const noexcept;
148  bool isInt64() const noexcept;
149  bool isBool() const noexcept;
150  bool isDouble() const noexcept;
151  bool isString() const noexcept;
152  bool isObject() const noexcept;
153  bool isArray() const noexcept;
154  bool isBinaryData() const noexcept;
155  bool isMethod() const noexcept;
156 
162  bool equals (const var& other) const noexcept;
163 
168  bool equalsWithSameType (const var& other) const noexcept;
169 
171  bool hasSameTypeAs (const var& other) const noexcept;
172 
177  var clone() const noexcept;
178 
179  //==============================================================================
183  int size() const;
184 
192  const var& operator[] (int arrayIndex) const;
193 
201  var& operator[] (int arrayIndex);
202 
210  void append (const var& valueToAppend);
211 
219  void insert (int index, const var& value);
220 
226  void remove (int index);
227 
234  void resize (int numArrayElementsWanted);
235 
240  int indexOf (const var& value) const;
241 
242  //==============================================================================
244  const var& operator[] (const Identifier& propertyName) const;
246  const var& operator[] (const char* propertyName) const;
249  var getProperty (const Identifier& propertyName, const var& defaultReturnValue) const;
250 
252  var call (const Identifier& method) const;
254  var call (const Identifier& method, const var& arg1) const;
256  var call (const Identifier& method, const var& arg1, const var& arg2) const;
258  var call (const Identifier& method, const var& arg1, const var& arg2, const var& arg3);
260  var call (const Identifier& method, const var& arg1, const var& arg2, const var& arg3, const var& arg4) const;
262  var call (const Identifier& method, const var& arg1, const var& arg2, const var& arg3, const var& arg4, const var& arg5) const;
264  var invoke (const Identifier& method, const var* arguments, int numArguments) const;
266  NativeFunction getNativeFunction() const;
267 
268  //==============================================================================
273  void writeToStream (OutputStream& output) const;
274 
280  static var readFromStream (InputStream& input);
281 
282 private:
283  //==============================================================================
284  class VariantType; friend class VariantType;
285  class VariantType_Void; friend class VariantType_Void;
286  class VariantType_Undefined; friend class VariantType_Undefined;
287  class VariantType_Int; friend class VariantType_Int;
288  class VariantType_Int64; friend class VariantType_Int64;
289  class VariantType_Double; friend class VariantType_Double;
290  class VariantType_Bool; friend class VariantType_Bool;
291  class VariantType_String; friend class VariantType_String;
292  class VariantType_Object; friend class VariantType_Object;
293  class VariantType_Array; friend class VariantType_Array;
294  class VariantType_Binary; friend class VariantType_Binary;
295  class VariantType_Method; friend class VariantType_Method;
296 
297  union ValueUnion
298  {
299  int intValue;
300  int64 int64Value;
301  bool boolValue;
302  double doubleValue;
303  char stringValue [sizeof (String)];
304  ReferenceCountedObject* objectValue;
305  MemoryBlock* binaryValue;
306  NativeFunction methodValue;
307  };
308 
309  const VariantType* type;
310  ValueUnion value;
311 
312  Array<var>* convertToArray();
313  var (const VariantType&) noexcept;
314 };
315 
317 bool operator== (const var& v1, const var& v2) noexcept;
319 bool operator!= (const var& v1, const var& v2) noexcept;
320 bool operator== (const var& v1, const String& v2);
321 bool operator!= (const var& v1, const String& v2);
322 bool operator== (const var& v1, const char* v2);
323 bool operator!= (const var& v1, const char* v2);
324 
325 
326 #endif // JUCE_VARIANT_H_INCLUDED
int numArguments
Definition: juce_Variant.h:59
Definition: juce_Variant.h:46
#define noexcept
Definition: juce_CompilerSupport.h:141
Definition: juce_Variant.cpp:367
Definition: juce_MemoryBlock.h:38
Definition: juce_InputStream.h:41
Definition: juce_String.h:43
Definition: juce_Variant.h:53
Definition: juce_Variant.cpp:138
#define JUCE_API
Definition: juce_StandardHeader.h:139
Definition: juce_Variant.cpp:168
#define const
Definition: juce_DynamicObject.h:44
Definition: juce_ReferenceCountedObject.h:65
Definition: juce_Variant.cpp:303
Definition: juce_Variant.cpp:108
const var & thisObject
Definition: juce_Variant.h:57
Definition: juce_Variant.cpp:43
Definition: juce_OutputStream.h:42
long long int64
Definition: juce_MathsFunctions.h:60
Definition: juce_Variant.cpp:221
Definition: juce_Array.h:60
Definition: juce_Variant.cpp:261
#define JUCE_DECLARE_NON_COPYABLE(className)
Definition: juce_PlatformDefs.h:191
Definition: juce_Variant.cpp:396
Definition: juce_Variant.cpp:78
Definition: juce_Variant.cpp:195
Definition: juce_Variant.cpp:90
const var * arguments
Definition: juce_Variant.h:58
Definition: juce_Identifier.h:43