Obj GAP_ElmRecord(Obj rec, Obj name) { UInt rnam = RNamObj(name); if (ISB_REC(rec, rnam)) return ELM_REC(rec, rnam); return 0; }
/**************************************************************************** ** *F RNamObj(<obj>) . . . . . . . . . . . convert an object to a record name ** ** 'RNamObj' returns the record name corresponding to the object <obj>, ** which currently must be a string or an integer. */ UInt RNamObj ( Obj obj ) { /* convert integer object */ if ( IS_INTOBJ(obj) ) { return RNamIntg( INT_INTOBJ(obj) ); } /* convert string object (empty string may have type T_PLIST) */ else if ( IsStringConv(obj) && IS_STRING_REP(obj) ) { return RNamName( CSTR_STRING(obj) ); } /* otherwise fail */ else { obj = ErrorReturnObj( "Record: '<rec>.(<obj>)' <obj> must be a string or an integer", 0L, 0L, "you can replace <obj> via 'return <obj>;'" ); return RNamObj( obj ); } }
void GAP_AssRecord(Obj rec, Obj name, Obj val) { UInt rnam = RNamObj(name); ASS_REC(rec, rnam, val); }
/**************************************************************************** ** *F FuncRNamObj(<self>,<obj>) . . . . convert an object to a record name ** ** 'FuncRNamObj' implements the internal function 'RNamObj'. ** ** 'RNamObj( <obj> )' ** ** 'RNamObj' returns the record name corresponding to the object <obj>, ** which currently must be a string or an integer. */ static Obj FuncRNamObj(Obj self, Obj obj) { return INTOBJ_INT( RNamObj( obj ) ); }
/**************************************************************************** ** *F RNamObjHandler(<self>,<obj>) . . . . convert an object to a record name ** ** 'RNamObjHandler' implements the internal function 'RNamObj'. ** ** 'RNamObj( <obj> )' ** ** 'RNamObj' returns the record name corresponding to the object <obj>, ** which currently must be a string or an integer. */ Obj RNamObjHandler ( Obj self, Obj obj ) { return INTOBJ_INT( RNamObj( obj ) ); }