summaryrefslogtreecommitdiffstats
path: root/o3d/gpu_plugin/np_utils/np_utils.cc
diff options
context:
space:
mode:
Diffstat (limited to 'o3d/gpu_plugin/np_utils/np_utils.cc')
-rw-r--r--o3d/gpu_plugin/np_utils/np_utils.cc57
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