26 DynamicObject::DynamicObject()
30 DynamicObject::DynamicObject (
const DynamicObject& other)
31 : ReferenceCountedObject(), properties (other.properties)
35 DynamicObject::~DynamicObject()
39 bool DynamicObject::hasProperty (
const Identifier& propertyName)
const
41 const var*
const v = properties.getVarPointer (propertyName);
42 return v !=
nullptr && ! v->isMethod();
45 const var& DynamicObject::getProperty (
const Identifier& propertyName)
const
47 return properties [propertyName];
50 void DynamicObject::setProperty (
const Identifier& propertyName,
const var& newValue)
52 properties.set (propertyName, newValue);
55 void DynamicObject::removeProperty (
const Identifier& propertyName)
57 properties.
remove (propertyName);
60 bool DynamicObject::hasMethod (
const Identifier& methodName)
const
62 return getProperty (methodName).isMethod();
67 if (
auto function = properties [method].getNativeFunction())
68 return function (args);
73 void DynamicObject::setMethod (
Identifier name, var::NativeFunction
function)
75 properties.set (name,
var (
function));
78 void DynamicObject::clear()
83 void DynamicObject::cloneAllProperties()
85 for (
int i = properties.size(); --i >= 0;)
86 if (
auto* v = properties.getVarPointerAt (i))
97 void DynamicObject::writeAsJSON (
OutputStream& out,
const int indentLevel,
const bool allOnOneLine,
int maximumDecimalPlaces)
103 const int numValues = properties.size();
105 for (
int i = 0; i < numValues; ++i)
108 JSONFormatter::writeSpaces (out, indentLevel + JSONFormatter::indentSize);
111 JSONFormatter::writeString (out, properties.getName (i));
113 JSONFormatter::write (out, properties.getValueAt (i), indentLevel + JSONFormatter::indentSize, allOnOneLine, maximumDecimalPlaces);
115 if (i < numValues - 1)
120 out <<
',' << newLine;
122 else if (! allOnOneLine)
127 JSONFormatter::writeSpaces (out, indentLevel);
void cloneAllProperties()
var clone() const noexcept