示例#1
0
文件: serialize.c 项目: dimpase/gap
void SerializeObj(Obj obj)
{
    if (!obj) {
        /* Handle unbound list elements correctly */
        WriteTNum(T_BACKREF);
        WriteImmediateObj(INTOBJ_INT(0));
        return;
    }
    SerializationFuncByTNum[TNUM_OBJ(obj)](obj);
}
示例#2
0
int SerializedAlready(Obj obj) {
  Obj ref = LookupObjMap(TLS(SerializationRegistry), obj);
  if (ref) {
    WriteTNum(T_BACKREF);
    WriteImmediateObj(OBJ_BACKREF(INT_INTOBJ(ref)));
    return 1;
  } else {
    TLS(SerializationIndex)++;
    AddObjMap(TLS(SerializationRegistry), obj,
        INTOBJ_INT(TLS(SerializationIndex)));
    return 0;
  }
}
示例#3
0
文件: serialize.c 项目: dimpase/gap
int SerializedAlready(Obj obj)
{
    Obj ref = LookupObjMap(MODULE_STATE(Serialize).registry, obj);
    if (ref) {
        WriteTNum(T_BACKREF);
        WriteImmediateObj(OBJ_BACKREF(INT_INTOBJ(ref)));
        return 1;
    }
    else {
        MODULE_STATE(Serialize).index++;
        AddObjMap(MODULE_STATE(Serialize).registry, obj,
                  INTOBJ_INT(MODULE_STATE(Serialize).index));
        return 0;
    }
}
示例#4
0
void SerializeUnbound() {
  WriteTNum(T_BACKREF);
  WriteImmediateObj(INTOBJ_INT(0));
}