00001 00014 int plint_ref_idx(plint_mem_t * pmem, plint_ref_t * pref) 00015 { 00016 plint_idx_t i; 00017 00018 for (; *pref ;) 00019 switch ((plint_ref_var(*pref))->key->get(&i), i.type) 00020 { 00021 case PLINT_idx_int: 00022 assert(plint_typ_equ(i.typ, PLINT_num_int)); 00023 plint_ref_var(*pref)->key->idx(pmem, pref, i.val.num_int); 00024 break; 00025 00026 case PLINT_idx_fld: 00027 assert(plint_typ_equ(i.typ, PLINT_str)); 00028 plint_ref_var(*pref)->key->fld(pmem, pref, i.val.str); 00029 break; 00030 00031 case PLINT_idx_key: 00032 plint_ref_var(*pref)->key->key(pmem, pref, &i.val, i.typ); 00033 break; 00034 00035 case PLINT_idx_end: 00036 return !0; 00037 00038 default: 00039 assert(0); 00040 00041 } 00042 00043 return 0; 00044 } 00045