diff options
Diffstat (limited to 'o3d/gpu_plugin/np_utils/np_utils.cc')
-rw-r--r-- | o3d/gpu_plugin/np_utils/np_utils.cc | 57 |
1 files changed, 43 insertions, 14 deletions
diff --git a/o3d/gpu_plugin/np_utils/np_utils.cc b/o3d/gpu_plugin/np_utils/np_utils.cc index 33c0d00..044dd37 100644 --- a/o3d/gpu_plugin/np_utils/np_utils.cc +++ b/o3d/gpu_plugin/np_utils/np_utils.cc @@ -18,7 +18,7 @@ bool NPVariantToValue(bool* value, const NPVariant& variant) { return false; } -bool NPVariantToValue(int* value, const NPVariant& variant) { +bool NPVariantToValue(int32* value, const NPVariant& variant) { if (NPVARIANT_IS_INT32(variant)) { *value = NPVARIANT_TO_INT32(variant); return true; @@ -65,7 +65,7 @@ void ValueToNPVariant(bool value, NPVariant* variant) { BOOLEAN_TO_NPVARIANT(value, *variant); } -void ValueToNPVariant(int value, NPVariant* variant) { +void ValueToNPVariant(int32 value, NPVariant* variant) { INT32_TO_NPVARIANT(value, *variant); } @@ -88,7 +88,11 @@ SmartNPVariant::SmartNPVariant() { } SmartNPVariant::SmartNPVariant(const SmartNPVariant& rhs) { - Copy(rhs); + rhs.CopyTo(this); +} + +SmartNPVariant::SmartNPVariant(const NPVariant& rhs) { + static_cast<const SmartNPVariant&>(rhs).CopyTo(this); } SmartNPVariant::~SmartNPVariant() { @@ -97,29 +101,45 @@ SmartNPVariant::~SmartNPVariant() { SmartNPVariant& SmartNPVariant::operator=(const SmartNPVariant& rhs) { Release(); - Copy(rhs); + rhs.CopyTo(this); + return *this; +} + +SmartNPVariant& SmartNPVariant::operator=(const NPVariant& rhs) { + Release(); + static_cast<const SmartNPVariant&>(rhs).CopyTo(this); return *this; } +bool SmartNPVariant::IsVoid() const { + return NPVARIANT_IS_VOID(*this); +} + void SmartNPVariant::Release() { NPBrowser::get()->ReleaseVariantValue(this); VOID_TO_NPVARIANT(*this); } -void SmartNPVariant::Copy(const NPVariant& rhs) { - if (NPVARIANT_IS_OBJECT(rhs)) { - NPObject* object = NPVARIANT_TO_OBJECT(rhs); - OBJECT_TO_NPVARIANT(object, *this); +void SmartNPVariant::Invalidate() { + if (NPVARIANT_IS_OBJECT(*this)) { + NULL_TO_NPVARIANT(*this); + } +} + +void SmartNPVariant::CopyTo(NPVariant* rhs) const { + if (NPVARIANT_IS_OBJECT(*this)) { + NPObject* object = NPVARIANT_TO_OBJECT(*this); + OBJECT_TO_NPVARIANT(object, *rhs); NPBrowser::get()->RetainObject(object); - } else if (NPVARIANT_IS_STRING(rhs)) { + } else if (NPVARIANT_IS_STRING(*this)) { NPUTF8* copy = static_cast<NPUTF8*>(NPBrowser::get()->MemAlloc( - rhs.value.stringValue.UTF8Length)); + value.stringValue.UTF8Length)); memcpy(copy, - rhs.value.stringValue.UTF8Characters, - rhs.value.stringValue.UTF8Length); - STRINGN_TO_NPVARIANT(copy, rhs.value.stringValue.UTF8Length, *this); + value.stringValue.UTF8Characters, + value.stringValue.UTF8Length); + STRINGN_TO_NPVARIANT(copy, value.stringValue.UTF8Length, *rhs); } else { - memcpy(this, &rhs, sizeof(rhs)); + memcpy(rhs, this, sizeof(*rhs)); } } @@ -141,5 +161,14 @@ bool NPHasProperty(NPP npp, NPBrowser::get()->GetStringIdentifier(name)); } +bool NPRemoveProperty(NPP npp, + const NPObjectPointer<NPObject>& object, + const NPUTF8* name) { + return NPBrowser::get()->RemoveProperty( + npp, + object.Get(), + NPBrowser::get()->GetStringIdentifier(name)); +} + } // namespace gpu_plugin } // namespace o3d |