Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019 #ifndef GNASH_NPVARIANT_H
00020 #define GNASH_NPVARIANT_H
00021
00022 #if NPAPI_VERSION == 190
00023 #include "npupp.h"
00024 #else
00025 #include "npapi.h"
00026 #include "npruntime.h"
00027 #endif
00028
00029 namespace gnash {
00030
00031 inline const uint32_t&
00032 GetNPStringLen(const NPString& str)
00033 {
00034 #if NPAPI_VERSION == 192
00035 return str.UTF8Length;
00036 #else
00037 return str.utf8length;
00038 #endif
00039 }
00040
00041 inline const NPUTF8*
00042 GetNPStringChars(const NPString& str)
00043 {
00044 #if NPAPI_VERSION == 192
00045 return str.UTF8Characters;
00046 #else
00047 return str.utf8characters;
00048 #endif
00049 }
00050
00054 inline void
00055 CopyVariantValue(const NPVariant& from, NPVariant& to)
00056 {
00057
00058 to = from;
00059
00060
00061
00062 switch(from.type) {
00063 case NPVariantType_String:
00064 {
00065 const NPString& fromstr = NPVARIANT_TO_STRING(from);
00066 const uint32_t& len = GetNPStringLen(fromstr);
00067
00068 NPUTF8* tostr = static_cast<NPUTF8*>(NPN_MemAlloc(len));
00069 std::copy(GetNPStringChars(fromstr),
00070 GetNPStringChars(fromstr)+ GetNPStringLen(fromstr), tostr);
00071
00072 STRINGN_TO_NPVARIANT(tostr, len, to);
00073 break;
00074 }
00075 case NPVariantType_Object:
00076 NPN_RetainObject(NPVARIANT_TO_OBJECT(to));
00077 break;
00078 default:
00079 {}
00080 }
00081 }
00082
00084
00086 inline std::string
00087 NPStringToString(const NPString& str)
00088 {
00089 return std::string(GetNPStringChars(str), GetNPStringLen(str));
00090 }
00091
00092
00094
00102 class GnashNPVariant
00103 {
00104 public:
00105 GnashNPVariant()
00106 {
00107 NULL_TO_NPVARIANT(_variant);
00108 }
00109
00110 GnashNPVariant(const GnashNPVariant& var)
00111 {
00112 CopyVariantValue(var._variant, _variant);
00113 }
00114
00117 GnashNPVariant(const NPVariant& var)
00118 {
00119 CopyVariantValue(var, _variant);
00120 }
00121
00122 GnashNPVariant& operator= (const GnashNPVariant& var)
00123 {
00124
00125 if ( &var == this ) return *this;
00126
00127 NPN_ReleaseVariantValue(&_variant);
00128
00129 CopyVariantValue(var._variant, _variant);
00130
00131 return *this;
00132 }
00133
00135
00138 void
00139 copy(NPVariant& dest) const
00140 {
00141 CopyVariantValue(_variant, dest);
00142 }
00143
00145
00149 const NPVariant& get() const { return _variant; }
00150
00151 ~GnashNPVariant()
00152 {
00153 NPN_ReleaseVariantValue(&_variant);
00154 }
00155
00156 private:
00157 NPVariant _variant;
00158 };
00159
00160 }
00161
00162 #endif // GNASH_NPVARIANT_H
00163
00164
00165
00166
00167