/** amino acid 3-letter to 1-letter code conversion */ __inline__ static char aacode(char *code3) { char residue = ' '; /* 1-letter residue name */ /* three-letter code of amino acid residues, exception HET -> X */ char *aa3[] = {"ALA","---","CYS","ASP","GLU","PHE","GLY","HIS","ILE","---","LYS","LEU","MET","ASN","---","PRO","GLN","ARG","SER","THR","UNL","VAL","TRP","HET","TYR","UNK"}; /* nucleotide residues */ char *nuc[] = {" A"," DA"," C"," DC","---","---"," G"," DG"," I"," DI","---","---","---"," N"," DN","---","---","---"," DT"," T"," U"," DU","---","---","---","---"}; /* match against amino acid residues */ residue = scan_array(code3, aa3, 65); /* match against nucleotide residues */ if (residue == ' ') residue = scan_array(code3, nuc, 97); /* residue not found */ if (residue == ' ') { Warning("Check the format of the PDB file: might be non-standard. See examples in the README file."); ErrorSpec("Unknown standard residue type in protein structure:", code3); } /*else fprintf(stderr, "%s:%d: %c ", __FILE__, __LINE__, residue);*/ return residue; }
void Parser::scan_value(void) { int c = read_byte(); switch (c) { case trace::TYPE_NULL: case trace::TYPE_FALSE: case trace::TYPE_TRUE: break; case trace::TYPE_SINT: scan_sint(); break; case trace::TYPE_UINT: scan_uint(); break; case trace::TYPE_FLOAT: scan_float(); break; case trace::TYPE_DOUBLE: scan_double(); break; case trace::TYPE_STRING: scan_string(); break; case trace::TYPE_ENUM: scan_enum(); break; case trace::TYPE_BITMASK: scan_bitmask(); break; case trace::TYPE_ARRAY: scan_array(); break; case trace::TYPE_STRUCT: scan_struct(); break; case trace::TYPE_BLOB: scan_blob(); break; case trace::TYPE_OPAQUE: scan_opaque(); break; case trace::TYPE_REPR: scan_repr(); break; case trace::TYPE_WSTRING: scan_wstring(); break; default: std::cerr << "error: unknown type " << c << "\n"; exit(1); case -1: break; } }
void mark_recursive(Managed_Object_Handle ref, bool ref_is_compressed) { // If ref_is_compressed, ref is a compressed reference: the uint32 offset to an object in the heap. // ref_is_compressed => (GC::compressing_references && is_compressed_reference(ref)) assert(!ref_is_compressed || (GC::compressing_references && is_compressed_reference((COMPRESSED_REFERENCE)ref))); uint64 null_ref = (GC::compressing_references? GC::heap_base : NULL); if (ref_is_compressed) { if (ref == 0) { return; } } else { if ((uint64)ref == null_ref) { return; } } Object_With_Header *obj; if (ref_is_compressed) { Managed_Object_Handle ref2 = (Managed_Object_Handle)(GC::heap_base + (COMPRESSED_REFERENCE)ref); obj = (Object_With_Header *)(((Byte *)ref2) - sizeof(GC_Overhead)); } else { obj = (Object_With_Header *)(((Byte *)ref) - sizeof(GC_Overhead)); } unsigned space = obj->header.semispace; validate_object(obj); if(false && GC::verbosegc) { #ifdef GC_STATS printf("Marking object: %s%p [id=%I64d]\n", (ref_is_compressed? "compressed " : ""), ref, obj->header.id); #endif //GC_STATS } if(is_marked(obj)) { return; } set_marked(obj); Vtable_GC *vt = obj->vt(); if(false && GC::verbosegc) { printf("\tObject of type %s\n", class_get_name(vt->gcvt->ch)); } if(vt->gcvt->is_scannable_array) { scan_array(obj); } else { uint16 *offsets = vt->gcvt->offsets; Managed_Object_Handle ref2 = ref; if (ref_is_compressed) { ref2 = (Managed_Object_Handle)(GC::heap_base + (COMPRESSED_REFERENCE)ref); } if (GC::compressing_references) { while(*offsets) { COMPRESSED_REFERENCE *slot = (COMPRESSED_REFERENCE *)(((Byte *)ref2) + (*offsets)); COMPRESSED_REFERENCE val_offset = (COMPRESSED_REFERENCE)(*slot); assert(is_compressed_reference(val_offset)); Managed_Object_Handle val = (Managed_Object_Handle)(GC::heap_base + val_offset); push_on_mark_stack(val); offsets++; } } else { while(*offsets) { Managed_Object_Handle *slot = (Managed_Object_Handle *)(((Byte *)ref2) + *offsets); push_on_mark_stack(*slot); offsets++; } } } } //mark_recursive