本文整理汇总了C++中Persistent::MakeWeak方法的典型用法代码示例。如果您正苦于以下问题:C++ Persistent::MakeWeak方法的具体用法?C++ Persistent::MakeWeak怎么用?C++ Persistent::MakeWeak使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Persistent
的用法示例。
在下文中一共展示了Persistent::MakeWeak方法的9个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: AddToComponentMap
void ScriptSystem::AddToComponentMap(dtEntity::ComponentType ct, dtEntity::EntityId eid, v8::Handle<v8::Object> obj)
{
HandleScope scope;
Persistent<Object> pobj = Persistent<Object>::New(obj);
pobj.MakeWeak(this, &ComponentWrapperDestructor);
V8::AdjustAmountOfExternalAllocatedMemory(sizeof(dtEntity::Component));
mComponentMap[std::make_pair(ct, eid)] = pobj;
}
示例2: external
Handle<Value> rr_v8_external_create(VALUE value) {
rb_hash_aset(references, rb_obj_id(value), value);
Local<Value> external(External::New((void *)value));
Persistent<Value> record = Persistent<Value>::New(external);
// V8::AdjustAmountOfExternalAllocatedMemory(100000000);
record.MakeWeak(NULL, GCWeakReferenceCallback);
return external;
}
示例3: BindToJavaObject
int Conv::BindToJavaObject(JNIEnv *jniEnv, jobject jLocal, Handle<Object> val, jobject *jGlobal) {
int result = OK;
Persistent<Object> pVal = Persistent<Object>::New(val);
jobject ob = jniEnv->NewGlobalRef(jLocal);
pVal.MakeWeak(ob, releaseJavaRef);
val->SetPointerInInternalField(0, ob);
jniEnv->SetLongField(jLocal, instHandle, asLong(pVal));
*jGlobal = ob;
return result;
}
示例4: Null
Handle<Value> JsEngine::AnyToV8(jsvalue v, int32_t contextId)
{
if (v.type == JSVALUE_TYPE_EMPTY) {
return Handle<Value>();
}
if (v.type == JSVALUE_TYPE_NULL) {
return Null();
}
if (v.type == JSVALUE_TYPE_BOOLEAN) {
return Boolean::New(v.value.i32);
}
if (v.type == JSVALUE_TYPE_INTEGER) {
return Int32::New(v.value.i32);
}
if (v.type == JSVALUE_TYPE_NUMBER) {
return Number::New(v.value.num);
}
if (v.type == JSVALUE_TYPE_STRING) {
return String::New(v.value.str);
}
if (v.type == JSVALUE_TYPE_DATE) {
return Date::New(v.value.num);
}
// Arrays are converted to JS native arrays.
if (v.type == JSVALUE_TYPE_ARRAY) {
Local<Array> a = Array::New(v.length);
for(int i = 0; i < v.length; i++) {
a->Set(i, AnyToV8(v.value.arr[i], contextId));
}
return a;
}
// This is an ID to a managed object that lives inside the JsContext keep-alive
// cache. We just wrap it and the pointer to the engine inside an External. A
// managed error is still a CLR object so it is wrapped exactly as a normal
// managed object.
if (v.type == JSVALUE_TYPE_MANAGED || v.type == JSVALUE_TYPE_MANAGED_ERROR) {
ManagedRef* ref = new ManagedRef(this, contextId, v.length);
Local<Object> object = (*(managed_template_))->InstanceTemplate()->NewInstance();
if (object.IsEmpty()) {
return Null();
}
Persistent<Object> persistent = Persistent<Object>::New(object);
persistent->SetInternalField(0, External::New(ref));
persistent.MakeWeak(NULL, managed_destroy);
return persistent;
}
return Null();
}
示例5: New
void Shape::New(const v8::FunctionCallbackInfo<Value>& args)
{
HandleScope scope;
Handle<Object> self = args.Holder();
Shape *shape;
if (args[0]->IsExternal())
{
Local<External> ext = Local<External>::Cast(args[0]);
void *ptr = ext->Value();
shape = static_cast<Shape*>(ptr);
shape->Wrap(args.Holder());
}
else
{
shapeObj *s = (shapeObj *)msSmallMalloc(sizeof(shapeObj));
msInitShape(s);
if(args.Length() >= 1) {
s->type = args[0]->Int32Value();
}
else {
s->type = MS_SHAPE_NULL;
}
shape = new Shape(s);
shape->Wrap(self);
}
/* create the attribute template. should use ObjectWrap in future */
Handle<ObjectTemplate> attributes_templ = ObjectTemplate::New();
attributes_templ->SetInternalFieldCount(2);
attributes_templ->SetNamedPropertyHandler(attributeGetValue,
attributeSetValue);
Handle<Object> attributes = attributes_templ->NewInstance();
map<string, int> *attributes_map = new map<string, int>();
attributes->SetInternalField(0, External::New(attributes_map));
attributes->SetInternalField(1, External::New(shape->get()->values));
attributes->SetHiddenValue(String::New("__parent__"), self);
if (shape->layer) {
for (int i=0; i<shape->layer->numitems; ++i) {
(*attributes_map)[string(shape->layer->items[i])] = i;
}
}
Persistent<Object> pattributes;
pattributes.Reset(Isolate::GetCurrent(), attributes);
pattributes.MakeWeak(attributes_map, attributeWeakCallback);
pattributes.MarkIndependent();
self->Set(String::New("attributes"), attributes);
}
示例6: str
Handle<Value> def_timestep_image_map_constructor(const Arguments &args) {
int arg_length = args.Length();
Handle<Object> thiz = Handle<Object>::Cast(args.This());
timestep_image_map *map = timestep_image_map_init();
Local<External> m = External::New(map);
thiz->SetInternalField(0, m);
map->x = args[1]->NumberValue();
map->y = args[2]->NumberValue();
map->width = args[3]->NumberValue();
map->height = args[4]->NumberValue();
// to support both marcus-spritemaps (TM) as well as
// normal old style image maps (those that don't have explicit margins),
// check the argument length. If there are only 6 arguments, there are not
// specified margins. Set them to 0.
Handle<Value> url_val;
if (arg_length == 6) {
url_val = args[5];
map->margin_top = 0;
map->margin_right = 0;
map->margin_bottom = 0;
map->margin_left = 0;
} else {
url_val = args[9];
map->margin_top = args[5]->NumberValue();
map->margin_right = args[6]->NumberValue();
map->margin_bottom = args[7]->NumberValue();
map->margin_left = args[8]->NumberValue();
}
// WARNING: must not forget to free this at some point
String::Utf8Value str(url_val);
map->url = strdup(ToCString(str));
Persistent<Object> ref = Persistent<Object>::New(thiz);
ref.MakeWeak(map, image_map_finalize);
return thiz;
}
示例7: TJSBase
// コンストラクタ
TJSObject::TJSObject(Handle<Object> obj, const tTJSVariant &variant) : TJSBase(variant)
{
wrap(obj);
Persistent<Object> ref = Persistent<Object>::New(obj);
ref.MakeWeak(this, release);
}
示例8: test
extern "C" void test(WeakReferenceCallback* cleanup) {
Persistent<Context> c = createContext();
HandleScope handle_scope;
Persistent<Object> o = Persistent<Object>::New(Object::New());
o.MakeWeak(cleanup, disposeHandle);
}
示例9: makeWeak
extern "C" void makeWeak(Persistent<Value> prst, CALLBACK* cleanup) {
prst.MakeWeak(cleanup, disposeHandle);
// cout << "Hello from makeWeak c++" << endl;
}