OpenShot Audio Library | OpenShotAudio
1.0.0
Toggle main menu visibility
Loading...
Searching...
No Matches
juce_DynamicObject.cpp
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
23
namespace
juce
24
{
25
26
DynamicObject::DynamicObject()
27
{
28
}
29
30
DynamicObject::DynamicObject (
const
DynamicObject
& other)
31
:
ReferenceCountedObject
(), properties (other.properties)
32
{
33
}
34
35
DynamicObject::~DynamicObject()
36
{
37
}
38
39
bool
DynamicObject::hasProperty
(
const
Identifier
& propertyName)
const
40
{
41
const
var
*
const
v = properties.getVarPointer (propertyName);
42
return
v !=
nullptr
&& ! v->isMethod();
43
}
44
45
const
var
&
DynamicObject::getProperty
(
const
Identifier
& propertyName)
const
46
{
47
return
properties [propertyName];
48
}
49
50
void
DynamicObject::setProperty
(
const
Identifier
& propertyName,
const
var
& newValue)
51
{
52
properties.set (propertyName, newValue);
53
}
54
55
void
DynamicObject::removeProperty
(
const
Identifier
& propertyName)
56
{
57
properties.
remove
(propertyName);
58
}
59
60
bool
DynamicObject::hasMethod
(
const
Identifier
& methodName)
const
61
{
62
return
getProperty
(methodName).isMethod();
63
}
64
65
var
DynamicObject::invokeMethod
(
Identifier
method,
const
var::NativeFunctionArgs
& args)
66
{
67
if
(
auto
function = properties [method].getNativeFunction())
68
return
function (args);
69
70
return
{};
71
}
72
73
void
DynamicObject::setMethod
(
Identifier
name, var::NativeFunction function)
74
{
75
properties.set (name,
var
(function));
76
}
77
78
void
DynamicObject::clear
()
79
{
80
properties.clear();
81
}
82
83
void
DynamicObject::cloneAllProperties
()
84
{
85
for
(
int
i = properties.size(); --i >= 0;)
86
if
(
auto
* v = properties.getVarPointerAt (i))
87
*v = v->clone();
88
}
89
90
std::unique_ptr<DynamicObject>
DynamicObject::clone
()
const
91
{
92
auto
result = std::make_unique<DynamicObject> (*
this
);
93
result->cloneAllProperties();
94
return
result;
95
}
96
97
void
DynamicObject::writeAsJSON
(
OutputStream
& out,
const
JSON::FormatOptions
& format)
98
{
99
out <<
'{'
;
100
if
(format.
getSpacing
() ==
JSON::Spacing::multiLine
)
101
out << newLine;
102
103
const
int
numValues = properties.size();
104
105
for
(
int
i = 0; i < numValues; ++i)
106
{
107
if
(format.
getSpacing
() ==
JSON::Spacing::multiLine
)
108
JSONFormatter::writeSpaces (out, format.
getIndentLevel
() + JSONFormatter::indentSize);
109
110
out <<
'"'
;
111
JSONFormatter::writeString (out, properties.getName (i));
112
out <<
"\":"
;
113
114
if
(format.
getSpacing
() !=
JSON::Spacing::none
)
115
out <<
' '
;
116
117
JSON::writeToStream
(out,
118
properties.getValueAt (i),
119
format.
withIndentLevel
(format.
getIndentLevel
() + JSONFormatter::indentSize));
120
121
if
(i < numValues - 1)
122
{
123
out <<
","
;
124
125
switch
(format.
getSpacing
())
126
{
127
case
JSON::Spacing::none
:
break
;
128
case
JSON::Spacing::singleLine
: out <<
' '
;
break
;
129
case
JSON::Spacing::multiLine
: out << newLine;
break
;
130
}
131
}
132
else
if
(format.
getSpacing
() ==
JSON::Spacing::multiLine
)
133
out << newLine;
134
}
135
136
if
(format.
getSpacing
() ==
JSON::Spacing::multiLine
)
137
JSONFormatter::writeSpaces (out, format.
getIndentLevel
());
138
139
out <<
'}'
;
140
}
141
142
}
// namespace juce
juce::DynamicObject
Definition
juce_DynamicObject.h:40
juce::DynamicObject::hasProperty
virtual bool hasProperty(const Identifier &propertyName) const
Definition
juce_DynamicObject.cpp:39
juce::DynamicObject::setMethod
void setMethod(Identifier methodName, var::NativeFunction function)
Definition
juce_DynamicObject.cpp:73
juce::DynamicObject::removeProperty
virtual void removeProperty(const Identifier &propertyName)
Definition
juce_DynamicObject.cpp:55
juce::DynamicObject::invokeMethod
virtual var invokeMethod(Identifier methodName, const var::NativeFunctionArgs &args)
Definition
juce_DynamicObject.cpp:65
juce::DynamicObject::clone
virtual std::unique_ptr< DynamicObject > clone() const
Definition
juce_DynamicObject.cpp:90
juce::DynamicObject::hasMethod
virtual bool hasMethod(const Identifier &methodName) const
Definition
juce_DynamicObject.cpp:60
juce::DynamicObject::cloneAllProperties
void cloneAllProperties()
Definition
juce_DynamicObject.cpp:83
juce::DynamicObject::getProperty
virtual const var & getProperty(const Identifier &propertyName) const
Definition
juce_DynamicObject.cpp:45
juce::DynamicObject::setProperty
virtual void setProperty(const Identifier &propertyName, const var &newValue)
Definition
juce_DynamicObject.cpp:50
juce::DynamicObject::clear
void clear()
Definition
juce_DynamicObject.cpp:78
juce::DynamicObject::writeAsJSON
virtual void writeAsJSON(OutputStream &, const JSON::FormatOptions &)
Definition
juce_DynamicObject.cpp:97
juce::Identifier
Definition
juce_Identifier.h:39
juce::JSON::FormatOptions
Definition
juce_JSON.h:102
juce::JSON::FormatOptions::getIndentLevel
int getIndentLevel() const
Definition
juce_JSON.h:124
juce::JSON::FormatOptions::getSpacing
Spacing getSpacing() const
Definition
juce_JSON.h:118
juce::JSON::FormatOptions::withIndentLevel
FormatOptions withIndentLevel(int x) const
Definition
juce_JSON.h:115
juce::JSON::Spacing::none
@ none
All optional whitespace should be omitted.
Definition
juce_JSON.h:93
juce::JSON::Spacing::multiLine
@ multiLine
Newlines and spaces will be included in the output, in order to make it easy to read for humans.
Definition
juce_JSON.h:95
juce::JSON::Spacing::singleLine
@ singleLine
All output should be on a single line, but with some additional spacing, e.g. after commas and colons...
Definition
juce_JSON.h:94
juce::JSON::writeToStream
static void writeToStream(OutputStream &output, const var &objectToFormat, bool allOnOneLine=false, int maximumDecimalPlaces=15)
Definition
juce_JSON.cpp:519
juce::OutputStream
Definition
juce_OutputStream.h:38
juce::ReferenceCountedObject
Definition
juce_ReferenceCountedObject.h:66
juce::var
Definition
juce_Variant.h:42
juce::var::remove
void remove(int index)
Definition
juce_Variant.cpp:796
juce::var::NativeFunctionArgs
Definition
juce_Variant.h:49
libopenshot-audio
JuceLibraryCode
modules
juce_core
containers
juce_DynamicObject.cpp
Generated by
1.18.0