LMMS
Loading...
Searching...
No Matches
juce_DynamicObject.cpp
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
29
34
38
39bool DynamicObject::hasProperty (const Identifier& propertyName) const
40{
41 const var* const v = properties.getVarPointer (propertyName);
42 return v != nullptr && ! v->isMethod();
43}
44
45const var& DynamicObject::getProperty (const Identifier& propertyName) const
46{
47 return properties [propertyName];
48}
49
50void DynamicObject::setProperty (const Identifier& propertyName, const var& newValue)
51{
52 properties.set (propertyName, newValue);
53}
54
55void DynamicObject::removeProperty (const Identifier& propertyName)
56{
57 properties.remove (propertyName);
58}
59
60bool DynamicObject::hasMethod (const Identifier& methodName) const
61{
62 return getProperty (methodName).isMethod();
63}
64
66{
67 if (auto function = properties [method].getNativeFunction())
68 return function (args);
69
70 return {};
71}
72
77
79{
80 properties.clear();
81}
82
84{
85 for (int i = properties.size(); --i >= 0;)
86 if (auto* v = properties.getVarPointerAt (i))
87 *v = v->clone();
88}
89
91{
92 Ptr d (new DynamicObject (*this));
93 d->cloneAllProperties();
94 return d;
95}
96
97void DynamicObject::writeAsJSON (OutputStream& out, const int indentLevel, const bool allOnOneLine, int maximumDecimalPlaces)
98{
99 out << '{';
100 if (! allOnOneLine)
101 out << newLine;
102
103 const int numValues = properties.size();
104
105 for (int i = 0; i < numValues; ++i)
106 {
107 if (! allOnOneLine)
109
110 out << '"';
112 out << "\": ";
113 JSONFormatter::write (out, properties.getValueAt (i), indentLevel + JSONFormatter::indentSize, allOnOneLine, maximumDecimalPlaces);
114
115 if (i < numValues - 1)
116 {
117 if (allOnOneLine)
118 out << ", ";
119 else
120 out << ',' << newLine;
121 }
122 else if (! allOnOneLine)
123 out << newLine;
124 }
125
126 if (! allOnOneLine)
127 JSONFormatter::writeSpaces (out, indentLevel);
128
129 out << '}';
130}
131
132} // namespace juce
virtual bool hasProperty(const Identifier &propertyName) const
Definition juce_DynamicObject.cpp:39
void setMethod(Identifier methodName, var::NativeFunction function)
Definition juce_DynamicObject.cpp:73
ReferenceCountedObjectPtr< DynamicObject > Ptr
Definition juce_DynamicObject.h:47
~DynamicObject() override
Definition juce_DynamicObject.cpp:35
virtual void removeProperty(const Identifier &propertyName)
Definition juce_DynamicObject.cpp:55
virtual var invokeMethod(Identifier methodName, const var::NativeFunctionArgs &args)
Definition juce_DynamicObject.cpp:65
virtual Ptr clone()
Definition juce_DynamicObject.cpp:90
virtual void writeAsJSON(OutputStream &, int indentLevel, bool allOnOneLine, int maximumDecimalPlaces)
Definition juce_DynamicObject.cpp:97
virtual bool hasMethod(const Identifier &methodName) const
Definition juce_DynamicObject.cpp:60
void cloneAllProperties()
Definition juce_DynamicObject.cpp:83
virtual const var & getProperty(const Identifier &propertyName) const
Definition juce_DynamicObject.cpp:45
NamedValueSet properties
Definition juce_DynamicObject.h:122
virtual void setProperty(const Identifier &propertyName, const var &newValue)
Definition juce_DynamicObject.cpp:50
DynamicObject()
Definition juce_DynamicObject.cpp:26
void clear()
Definition juce_DynamicObject.cpp:78
Definition juce_Identifier.h:39
Definition juce_OutputStream.h:38
Definition juce_Variant.h:42
std::function< var(const NativeFunctionArgs &)> NativeFunction
Definition juce_Variant.h:57
unsigned v[N_MAX]
Definition inflate.c:1584
unsigned d
Definition inflate.c:940
register unsigned i
Definition inflate.c:1575
static const char * name
Definition pugl.h:1582
float out
Definition lilv_test.c:1461
Definition carla_juce.cpp:31
NewLine newLine
Definition juce_String.cpp:28
jack_client_t client jack_client_t client jack_client_t client jack_client_t JackInfoShutdownCallback function
Definition juce_linux_JackAudio.cpp:63
static void writeSpaces(OutputStream &out, int numSpaces)
Definition juce_JSON.cpp:414
static void write(OutputStream &out, const var &v, int indentLevel, bool allOnOneLine, int maximumDecimalPlaces)
Definition juce_JSON.cpp:309
@ indentSize
Definition juce_JSON.cpp:454
static void writeString(OutputStream &out, String::CharPointerType t)
Definition juce_JSON.cpp:368
Definition juce_Variant.h:49
static ZCONST char Far * method[NUM_METHODS]
Definition zipinfo.c:1008