本文整理汇总了C++中Tuple::write_barrier方法的典型用法代码示例。如果您正苦于以下问题:C++ Tuple::write_barrier方法的具体用法?C++ Tuple::write_barrier怎么用?C++ Tuple::write_barrier使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Tuple
的用法示例。
在下文中一共展示了Tuple::write_barrier方法的5个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: tuple_dup
Tuple* Tuple::tuple_dup(STATE) {
native_int fields = num_fields();
Tuple* tup = state->vm()->new_young_tuple_dirty(fields);
if(likely(tup)) {
for(native_int i = 0; i < fields; i++) {
Object *obj = field[i];
// fields equals size so bounds checking is unecessary
tup->field[i] = obj;
// Because tup is promised to be a young object,
// we can elide the write barrier usage.
}
return tup;
}
// Otherwise, use slower creation path that might create
// a mature object.
tup = create(state, fields);
for(native_int i = 0; i < fields; i++) {
Object *obj = field[i];
// fields equals size so bounds checking is unecessary
tup->field[i] = obj;
tup->write_barrier(state, obj);
}
return tup;
}
示例2: from
Tuple* Tuple::from(STATE, size_t fields, ...) {
va_list ar;
Tuple* tup = create(state, fields);
va_start(ar, fields);
for(size_t i = 0; i < fields; i++) {
Object *obj = va_arg(ar, Object*);
// fields equals size so bounds checking is unecessary
tup->field[i] = obj;
if(obj->reference_p()) tup->write_barrier(state, obj);
}
va_end(ar);
return tup;
}
示例3: pattern
// @todo performance primitive; could be replaced with Ruby
Tuple* Tuple::pattern(STATE, Fixnum* size, Object* val) {
native_int cnt = size->to_native();
Tuple* tuple = Tuple::create(state, cnt);
// val is referend size times, we only need to hit the write
// barrier once
if(val->reference_p()) tuple->write_barrier(state, val);
for(native_int i = 0; i < cnt; i++) {
// bounds checking is covered because we instantiated the tuple
// in this method
tuple->field[i] = val;
}
return tuple;
}
示例4: from
Tuple* Tuple::from(STATE, native_int fields, ...) {
if(fields < 0) {
rubinius::bug("Invalid tuple size");
}
va_list ar;
Tuple* tup = create(state, fields);
va_start(ar, fields);
for(native_int i = 0; i < fields; i++) {
Object *obj = va_arg(ar, Object*);
// fields equals size so bounds checking is unecessary
tup->field[i] = obj;
tup->write_barrier(state, obj);
}
va_end(ar);
return tup;
}
示例5: pattern
// @todo performance primitive; could be replaced with Ruby
Tuple* Tuple::pattern(STATE, Fixnum* size, Object* val) {
native_int cnt = size->to_native();
if(cnt < 0) {
Exception::argument_error(state, "negative tuple size");
}
Tuple* tuple = Tuple::create(state, cnt);
for(native_int i = 0; i < cnt; i++) {
// bounds checking is covered because we instantiated the tuple
// in this method
tuple->field[i] = val;
}
// val is referend size times, we only need to hit the write
// barrier once
tuple->write_barrier(state, val);
return tuple;
}