26DynamicObject::DynamicObject()
30DynamicObject::DynamicObject (
const DynamicObject& other)
31 : ReferenceCountedObject(), properties (other.properties)
35DynamicObject::~DynamicObject()
39bool DynamicObject::hasProperty (
const Identifier& propertyName)
const
41 const var*
const v = properties.getVarPointer (propertyName);
42 return v !=
nullptr && ! v->isMethod();
45const var& DynamicObject::getProperty (
const Identifier& propertyName)
const
47 return properties [propertyName];
50void DynamicObject::setProperty (
const Identifier& propertyName,
const var& newValue)
52 properties.set (propertyName, newValue);
55void DynamicObject::removeProperty (
const Identifier& propertyName)
57 properties.
remove (propertyName);
60bool DynamicObject::hasMethod (
const Identifier& methodName)
const
62 return getProperty (methodName).isMethod();
67 if (
auto function = properties [method].getNativeFunction())
68 return function (args);
73void DynamicObject::setMethod (
Identifier name, var::NativeFunction function)
75 properties.set (name,
var (function));
78void DynamicObject::clear()
83void DynamicObject::cloneAllProperties()
85 for (
int i = properties.size(); --i >= 0;)
86 if (
auto* v = properties.getVarPointerAt (i))
90std::unique_ptr<DynamicObject> DynamicObject::clone()
const
92 auto result = std::make_unique<DynamicObject> (*
this);
93 result->cloneAllProperties();
100 if (format.
getSpacing() == JSON::Spacing::multiLine)
103 const int numValues = properties.size();
105 for (
int i = 0; i < numValues; ++i)
107 if (format.
getSpacing() == JSON::Spacing::multiLine)
108 JSONFormatter::writeSpaces (out, format.
getIndentLevel() + JSONFormatter::indentSize);
111 JSONFormatter::writeString (out, properties.getName (i));
114 if (format.
getSpacing() != JSON::Spacing::none)
117 JSON::writeToStream (out,
118 properties.getValueAt (i),
121 if (i < numValues - 1)
127 case JSON::Spacing::none:
break;
128 case JSON::Spacing::singleLine: out <<
' ';
break;
129 case JSON::Spacing::multiLine: out << newLine;
break;
132 else if (format.
getSpacing() == JSON::Spacing::multiLine)
136 if (format.
getSpacing() == JSON::Spacing::multiLine)