virtual void Set(jobject obj, void *data, bool isNull) {
virtual void Set(jobject obj, void *data, bool isNull, JNI::NativeData::Deleter *deleter) {
class VdrMhpLangNativeDataImplementation : public JNI::NativeData::Implementation {   public:      virtual ~VdrMhpLangNativeDataImplementation() {}      virtual void Set(jobject obj, void *data, bool isNull) {         JNI::ReturnType value;         value.TypeLong = (int64_t)(intptr_t)data;         nativeData.SetValue(obj, value);         value.TypeBoolean = isNull ? JNI_TRUE : JNI_FALSE;         dataIsNull.SetValue(obj, value);      }      virtual void *Get(jobject obj) {         JNI::ReturnType value;         nativeData.GetValue(obj, value);         return (void *)(intptr_t)(int64_t)value.TypeLong;      }      virtual jobject Create() {         JNI::ReturnType ret;         create.CallMethod(ret);         return ret.TypeObject;      }      static bool Initialize() {         VdrMhpLangNativeDataImplementation *i=new VdrMhpLangNativeDataImplementation();         if (!i->init())            return false;         JNI::NativeData::SetImplementation(i);         return true;      }   protected:      bool init() {         JNI::ClassRef clazz, containerClass;         return (               clazz.SetClass("vdr/mhp/lang/NativeDataContainer$Data") &&               containerClass.SetClass("vdr/mhp/lang/NativeDataContainer") &&               nativeData.SetField(clazz, "nativeData", JNI::Long) &&               dataIsNull.SetField(clazz, "dataIsNull", JNI::Boolean) &&               create.SetMethodWithArguments(containerClass, "createNativeData", JNI::Object, 0, "vdr/mhp/lang/NativeData", (char *)NULL)                );      }      JNI::Field nativeData;      JNI::Field dataIsNull;      JNI::StaticMethod create;};