本文整理汇总了C++中DEREF函数的典型用法代码示例。如果您正苦于以下问题:C++ DEREF函数的具体用法?C++ DEREF怎么用?C++ DEREF使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了DEREF函数的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: Pl_Fd_Math_Unify_X_Y
/*-------------------------------------------------------------------------*
* PL_FD_MATH_UNIFY_X_Y *
* *
*-------------------------------------------------------------------------*/
Bool
Pl_Fd_Math_Unify_X_Y(WamWord x, WamWord y)
{
WamWord x_word, x_tag;
WamWord y_word, y_tag;
DEREF(x, x_word, x_tag);
DEREF(y, y_word, y_tag);
if (x_tag == TAG_FDV_MASK && y_tag == TAG_FDV_MASK)
{
MATH_CSTR_2(pl_x_eq_y, x, y);
return TRUE;
}
#ifdef DEBUG
DBGPRINTF("Prolog Unif: ");
Pl_Write_1(x_word);
DBGPRINTF(" = ");
Pl_Write_1(y_word);
DBGPRINTF("\n");
#endif
return Pl_Unify(x_word, y_word);
}
示例2: layout_deep_copy
void layout_deep_copy(MessageLayout* layout, void* to, void* from) {
upb_msg_field_iter it;
for (upb_msg_field_begin(&it, layout->msgdef);
!upb_msg_field_done(&it);
upb_msg_field_next(&it)) {
const upb_fielddef* field = upb_msg_iter_field(&it);
void* to_memory = slot_memory(layout, to, field);
uint32_t* to_oneof_case = slot_oneof_case(layout, to, field);
void* from_memory = slot_memory(layout, from, field);
uint32_t* from_oneof_case = slot_oneof_case(layout, from, field);
if (upb_fielddef_containingoneof(field)) {
if (*from_oneof_case == upb_fielddef_number(field)) {
*to_oneof_case = *from_oneof_case;
native_slot_deep_copy(upb_fielddef_type(field), to_memory, from_memory);
}
} else if (is_map_field(field)) {
DEREF(to_memory, VALUE) =
Map_deep_copy(DEREF(from_memory, VALUE));
} else if (upb_fielddef_label(field) == UPB_LABEL_REPEATED) {
DEREF(to_memory, VALUE) =
RepeatedField_deep_copy(DEREF(from_memory, VALUE));
} else {
if (field_contains_hasbit(layout, field)) {
if (!slot_is_hasbit_set(layout, from, field)) continue;
slot_set_hasbit(layout, to, field);
}
native_slot_deep_copy(upb_fielddef_type(field), to_memory, from_memory);
}
}
}
示例3: DEREF
// Handler for a submessage field in a oneof.
static void *oneofsubmsg_handler(void *closure,
const void *hd) {
MessageHeader* msg = closure;
const oneof_handlerdata_t *oneofdata = hd;
uint32_t oldcase = DEREF(msg, oneofdata->case_ofs, uint32_t);
VALUE subdesc =
get_def_obj((void*)oneofdata->md);
VALUE subklass = Descriptor_msgclass(subdesc);
VALUE submsg_rb;
MessageHeader* submsg;
if (oldcase != oneofdata->oneof_case_num ||
DEREF(msg, oneofdata->ofs, VALUE) == Qnil) {
DEREF(msg, oneofdata->ofs, VALUE) =
rb_class_new_instance(0, NULL, subklass);
}
// Set the oneof case *after* allocating the new class instance -- otherwise,
// if the Ruby GC is invoked as part of a call into the VM, it might invoke
// our mark routines, and our mark routines might see the case value
// indicating a VALUE is present and expect a valid VALUE. See comment in
// layout_set() for more detail: basically, the change to the value and the
// case must be atomic w.r.t. the Ruby VM.
DEREF(msg, oneofdata->case_ofs, uint32_t) =
oneofdata->oneof_case_num;
submsg_rb = DEREF(msg, oneofdata->ofs, VALUE);
TypedData_Get_Struct(submsg_rb, MessageHeader, &Message_type, submsg);
return submsg;
}
示例4: insertIntoComplexRe
void insertIntoComplexRe(char ** complexRe, int where, int * len, char * toInsert) {
char * buf;
int insertLen = strlen(toInsert);
int i = where;
/* enough space for complexRe+the new range */
*len = *len+(insertLen+1);
*complexRe = (char*)realloc(*complexRe, *len);
/* buffer the rest */
buf = (char*)malloc(*len);
int k;
for (k = i+2; k < *len-(insertLen+1); k++) {
buf[k-(i+2)] = DEREF(complexRe,k);
}
/* insert the string */
for (k = 0; k < insertLen; k++) {
DEREF(complexRe, i++) = toInsert[k];
}
/* put the buffer back in */
for (k = i; k < *len; k++) {
DEREF(complexRe,k) = buf[k-i];
}
free(buf);
}
示例5: Read_Arg
/*-------------------------------------------------------------------------*
* READ_ARG *
* *
*-------------------------------------------------------------------------*/
static WamWord
Read_Arg(WamWord **lst_adr)
{
WamWord word, tag_mask;
WamWord *adr;
WamWord car_word;
DEREF(**lst_adr, word, tag_mask);
if (tag_mask != TAG_LST_MASK)
{
if (tag_mask == TAG_REF_MASK)
Pl_Err_Instantiation();
if (word == NIL_WORD)
Pl_Err_Domain(pl_domain_non_empty_list, word);
Pl_Err_Type(pl_type_list, word);
}
adr = UnTag_LST(word);
car_word = Car(adr);
*lst_adr = &Cdr(adr);
DEREF(car_word, word, tag_mask);
return word;
}
示例6: do_ext
NODE *
do_ext(int nargs)
{
NODE *obj, *init = NULL, *fini = NULL, *ret = NULL;
SRCFILE *s;
char *init_func = NULL;
char *fini_func = NULL;
if (nargs == 3) {
fini = POP_STRING();
fini_func = fini->stptr;
}
if (nargs >= 2) {
init = POP_STRING();
init_func = init->stptr;
}
obj = POP_STRING();
s = add_srcfile(SRC_EXTLIB, obj->stptr, srcfiles, NULL, NULL);
if (s != NULL)
ret = load_old_ext(s, init_func, fini_func, obj);
DEREF(obj);
if (fini != NULL)
DEREF(fini);
if (init != NULL)
DEREF(init);
if (ret == NULL)
ret = dupnode(Nnull_string);
return ret;
}
示例7: layout_clear
void layout_clear(MessageLayout* layout,
const void* storage,
const upb_fielddef* field) {
void* memory = slot_memory(layout, storage, field);
uint32_t* oneof_case = slot_oneof_case(layout, storage, field);
if (field_contains_hasbit(layout, field)) {
slot_clear_hasbit(layout, storage, field);
}
if (upb_fielddef_containingoneof(field)) {
memset(memory, 0, NATIVE_SLOT_MAX_SIZE);
*oneof_case = ONEOF_CASE_NONE;
} else if (is_map_field(field)) {
VALUE map = Qnil;
const upb_fielddef* key_field = map_field_key(field);
const upb_fielddef* value_field = map_field_value(field);
VALUE type_class = field_type_class(value_field);
if (type_class != Qnil) {
VALUE args[3] = {
fieldtype_to_ruby(upb_fielddef_type(key_field)),
fieldtype_to_ruby(upb_fielddef_type(value_field)),
type_class,
};
map = rb_class_new_instance(3, args, cMap);
} else {
VALUE args[2] = {
fieldtype_to_ruby(upb_fielddef_type(key_field)),
fieldtype_to_ruby(upb_fielddef_type(value_field)),
};
map = rb_class_new_instance(2, args, cMap);
}
DEREF(memory, VALUE) = map;
} else if (upb_fielddef_label(field) == UPB_LABEL_REPEATED) {
VALUE ary = Qnil;
VALUE type_class = field_type_class(field);
if (type_class != Qnil) {
VALUE args[2] = {
fieldtype_to_ruby(upb_fielddef_type(field)),
type_class,
};
ary = rb_class_new_instance(2, args, cRepeatedField);
} else {
VALUE args[1] = { fieldtype_to_ruby(upb_fielddef_type(field)) };
ary = rb_class_new_instance(1, args, cRepeatedField);
}
DEREF(memory, VALUE) = ary;
} else {
native_slot_set(upb_fielddef_name(field),
upb_fielddef_type(field), field_type_class(field),
memory, layout_get_default(field));
}
}
示例8: layout_init
void layout_init(MessageLayout* layout,
void* storage) {
upb_msg_field_iter it;
for (upb_msg_field_begin(&it, layout->msgdef);
!upb_msg_field_done(&it);
upb_msg_field_next(&it)) {
const upb_fielddef* field = upb_msg_iter_field(&it);
void* memory = slot_memory(layout, storage, field);
uint32_t* oneof_case = slot_oneof_case(layout, storage, field);
if (upb_fielddef_containingoneof(field)) {
memset(memory, 0, NATIVE_SLOT_MAX_SIZE);
*oneof_case = ONEOF_CASE_NONE;
} else if (is_map_field(field)) {
VALUE map = Qnil;
const upb_fielddef* key_field = map_field_key(field);
const upb_fielddef* value_field = map_field_value(field);
VALUE type_class = field_type_class(value_field);
if (type_class != Qnil) {
VALUE args[3] = {
fieldtype_to_ruby(upb_fielddef_type(key_field)),
fieldtype_to_ruby(upb_fielddef_type(value_field)),
type_class,
};
map = rb_class_new_instance(3, args, cMap);
} else {
VALUE args[2] = {
fieldtype_to_ruby(upb_fielddef_type(key_field)),
fieldtype_to_ruby(upb_fielddef_type(value_field)),
};
map = rb_class_new_instance(2, args, cMap);
}
DEREF(memory, VALUE) = map;
} else if (upb_fielddef_label(field) == UPB_LABEL_REPEATED) {
VALUE ary = Qnil;
VALUE type_class = field_type_class(field);
if (type_class != Qnil) {
VALUE args[2] = {
fieldtype_to_ruby(upb_fielddef_type(field)),
type_class,
};
ary = rb_class_new_instance(2, args, cRepeatedField);
} else {
VALUE args[1] = { fieldtype_to_ruby(upb_fielddef_type(field)) };
ary = rb_class_new_instance(1, args, cRepeatedField);
}
DEREF(memory, VALUE) = ary;
} else {
native_slot_init(upb_fielddef_type(field), memory);
}
}
}
示例9: Pl_Get_Pred_Indicator
/*-------------------------------------------------------------------------*
* PL_GET_PRED_INDICATOR *
* *
* returns the functor and initializes the arity of the predicate indicator*
* func= -1 if it is a variable, arity= -1 if it is a variable *
*-------------------------------------------------------------------------*/
int
Pl_Get_Pred_Indicator(WamWord pred_indic_word, Bool must_be_ground, int *arity)
{
WamWord word, tag_mask;
int func;
DEREF(pred_indic_word, word, tag_mask);
if (tag_mask == TAG_REF_MASK && must_be_ground)
Pl_Err_Instantiation();
if (!Pl_Get_Structure(ATOM_CHAR('/'), 2, pred_indic_word))
{
if (!Flag_Value(FLAG_STRICT_ISO) &&
Pl_Rd_Callable(word, &func, arity) != NULL)
return func;
Pl_Err_Type(pl_type_predicate_indicator, pred_indic_word);
}
pl_pi_name_word = Pl_Unify_Variable();
pl_pi_arity_word = Pl_Unify_Variable();
if (must_be_ground)
func = Pl_Rd_Atom_Check(pl_pi_name_word);
else
{
DEREF(pl_pi_name_word, word, tag_mask);
if (tag_mask == TAG_REF_MASK)
func = -1;
else
func = Pl_Rd_Atom_Check(pl_pi_name_word);
}
if (must_be_ground)
{
*arity = Pl_Rd_Positive_Check(pl_pi_arity_word);
if (*arity > MAX_ARITY)
Pl_Err_Representation(pl_representation_max_arity);
}
else
{
DEREF(pl_pi_arity_word, word, tag_mask);
if (tag_mask == TAG_REF_MASK)
*arity = -1;
else
{
*arity = Pl_Rd_Positive_Check(pl_pi_arity_word);
if (*arity > MAX_ARITY)
Pl_Err_Representation(pl_representation_max_arity);
}
}
return func;
}
示例10: Pl_Fd_Prolog_To_Array_Int
/*-------------------------------------------------------------------------*
* PL_FD_PROLOG_TO_ARRAY_INT *
* *
*-------------------------------------------------------------------------*/
WamWord *
Pl_Fd_Prolog_To_Array_Int(WamWord list_word)
{
WamWord word, tag_mask;
WamWord save_list_word;
WamWord *lst_adr;
WamWord val;
int n = 0;
WamWord *array;
WamWord *save_array;
array = CS;
save_list_word = list_word;
save_array = array;
array++; /* +1 for the nb of elems */
for (;;)
{
DEREF(list_word, word, tag_mask);
if (tag_mask == TAG_REF_MASK)
Pl_Err_Instantiation();
if (word == NIL_WORD)
break;
if (tag_mask != TAG_LST_MASK)
Pl_Err_Type(pl_type_list, save_list_word);
lst_adr = UnTag_LST(word);
DEREF(Car(lst_adr), word, tag_mask);
if (tag_mask == TAG_REF_MASK)
Pl_Err_Instantiation();
if (tag_mask != TAG_INT_MASK)
Pl_Err_Type(pl_type_integer, word);
val = UnTag_INT(word);
*array++ = val;
n++;
list_word = Cdr(lst_adr);
}
*save_array = n;
CS = array;
return save_array;
}
示例11: Pl_Fd_List_Int_To_Range
/*-------------------------------------------------------------------------*
* PL_FD_LIST_INT_TO_RANGE *
* *
*-------------------------------------------------------------------------*/
void
Pl_Fd_List_Int_To_Range(Range *range, WamWord list_word)
{
WamWord word, tag_mask;
WamWord save_list_word;
WamWord *lst_adr;
WamWord val;
int n = 0;
save_list_word = list_word;
range->extra_cstr = FALSE;
Vector_Allocate_If_Necessary(range->vec);
Pl_Vector_Empty(range->vec);
for (;;)
{
DEREF(list_word, word, tag_mask);
if (tag_mask == TAG_REF_MASK)
Pl_Err_Instantiation();
if (word == NIL_WORD)
break;
if (tag_mask != TAG_LST_MASK)
Pl_Err_Type(pl_type_list, save_list_word);
lst_adr = UnTag_LST(word);
DEREF(Car(lst_adr), word, tag_mask);
if (tag_mask == TAG_REF_MASK)
Pl_Err_Instantiation();
if (tag_mask != TAG_INT_MASK)
Pl_Err_Type(pl_type_integer, word);
val = UnTag_INT(word);
if ((unsigned) val > (unsigned) pl_vec_max_integer)
range->extra_cstr = TRUE;
else
{
Vector_Set_Value(range->vec, val);
n++;
}
list_word = Cdr(lst_adr);
}
if (n == 0)
Set_To_Empty(range);
else
Pl_Range_From_Vector(range);
}
示例12: simplifyRe
SimpleReBuilder * simplifyRe(char ** complexRe, SimpleReBuilder * builder) {
int len = strlen(*complexRe);
simpleReBuilder(&builder, len);
int i,j;
for (i = 0, j = 0; i < len; i++, j++) {
switch(DEREF(complexRe, i)) {
case '\\':
handle_escape(builder, complexRe, &len, &j, &i);
break;
case '.':
builder->re[j] = ANY; //nak is ANY
break;
case '+':
builder->re[j] = PLUS; //0x01 is +
break;
case '?':
builder->re[j] = QUESTION; //0x02 is ?
break;
case '*':
builder->re[j] = STAR; //0x03 is *
break;
case '|':
builder->re[j] = ALTERNATE; //0x04 is |
break;
case '(':
builder->re[j] = PAREN_OPEN; //0x05 is (
break;
case ')':
builder->re[j] = PAREN_CLOSE; //0x06 is )
break;
case '[':
handle_range(builder, *complexRe, len, &j, &i);
break;
default:
builder->re[j] = DEREF(complexRe,i);
break;
}
}
builder->re[j] = '\0';
return builder;
}
示例13: rb_str_new2
static void *oneofbytes_handler(void *closure,
const void *hd,
size_t size_hint) {
MessageHeader* msg = closure;
const oneof_handlerdata_t *oneofdata = hd;
VALUE str = rb_str_new2("");
rb_enc_associate(str, kRubyString8bitEncoding);
DEREF(msg, oneofdata->case_ofs, uint32_t) =
oneofdata->oneof_case_num;
DEREF(msg, oneofdata->ofs, VALUE) = str;
return (void*)str;
}
示例14: Vector_mul
PVector_ptr Vector_mul(PVector_ptr a, PVector_ptr b)
{
REF((heap_object *)a.vector);
REF((heap_object *)b.vector);
int i;
if ( a.vector==NULL || b.vector==NULL || a.vector->length!=b.vector->length ) vector_operation_error();
size_t n = a.vector->length;
PVector_ptr c = PVector_init(0, n);
for (i=0; i<n; i++) c.vector->nodes[i].data = ith(a, i) * ith(b, i);
DEREF((heap_object *)a.vector);
DEREF((heap_object *)b.vector);
return c;
}
示例15: Vector_eq
bool Vector_eq(PVector_ptr a, PVector_ptr b) {
REF((heap_object *)a.vector);
REF((heap_object *)b.vector);
if (a.vector == NULL || b.vector == NULL) return false;
if (a.vector->length != b.vector->length) return false;
int i = (int)a.vector->length;
for (int j = 0; j < i; j++) {
if(a.vector->nodes[j].data != b.vector->nodes[j].data) return false;
}
DEREF((heap_object *)a.vector);
DEREF((heap_object *)b.vector);
return true;
}