Exemplo n.º 1
0
/** 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;
}
Exemplo n.º 2
0
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;
    }
}
Exemplo n.º 3
0
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