Example #1
0
void GDAFile::add(Common::SeekableReadStream *gda) {
	try {
		_gff4s.push_back(new GFF4File(gda, kG2DAID));

		const GFF4Struct &top = _gff4s.back()->getTopLevel();

		_rows.push_back(&top.getList(kGFF4G2DARowList));

		_rowStarts.push_back(_rowCount);
		_rowCount += _rows.back()->size();

		Columns columns = &top.getList(kGFF4G2DAColumnList);
		if (columns->size() != _columns->size())
			throw Common::Exception("Column counts don't match (%u vs. %u)",
			                        (uint)columns->size(), (uint)_columns->size());

		for (size_t i = 0; i < columns->size(); i++) {
			const uint32 hash1 = (uint32) (* columns)[i]->getUint(kGFF4G2DAColumnHash);
			const uint32 hash2 = (uint32) (*_columns)[i]->getUint(kGFF4G2DAColumnHash);

			const uint32 type1 = identifyType( columns, _rows.back(), i);
			const uint32 type2 = identifyType(_columns, _rows[0]    , i);

			if ((hash1 != hash2) || (type1 != type2))
				throw Common::Exception("Columns don't match (%u: %u+%u vs. %u+%u)", (uint) i,
				                        hash1, type1, hash2, type2);
		}

	} catch (Common::Exception &e) {
		clear();

		e.add("Failed adding GDA file");
		throw;
	}
}
void main_process(char input[]) {
    inputType t;

    t =  identifyType(input);
    verify_order(t);

    switch (t) {
    case DIRECTIVE:
        treat_directive(input);
        break;
    case COMMENT:
        treat_comment(input);
        break;
    case LABEL:
        //treat_label(input);
        break;
    case INSTRUCTION:
        treat_instruction(input);
        break;
    case ERROR:
        break;
    case NONE:
        break;
    }

}
Example #3
0
void GDAFile::load(Common::SeekableReadStream *gda) {
	try {
		_gff4s.push_back(new GFF4File(gda, kG2DAID));

		const GFF4Struct &top = _gff4s.back()->getTopLevel();

		_columns = &top.getList(kGFF4G2DAColumnList);
		_rows.push_back(&top.getList(kGFF4G2DARowList));

		_rowStarts.push_back(_rowCount);
		_rowCount += _rows.back()->size();

		_headers.resize(_columns->size());
		for (size_t i = 0; i < _columns->size(); i++) {
			if (!(*_columns)[i])
				continue;

			_headers[i].hash  = (uint32) (*_columns)[i]->getUint(kGFF4G2DAColumnHash);
			_headers[i].type  = (Type)   identifyType(_columns, _rows.back(), i);
			_headers[i].field = (uint32) kGFF4G2DAColumn1 + i;
		}

	} catch (Common::Exception &e) {
		clear();

		e.add("Failed reading GDA file");
		throw;
	}
}
void pre_process(char input[]) {
    inputType t = identifyType(input);
    switch (t) {                        // Does the basic operations in order to compute the labels in the pre process cicle
    case DIRECTIVE:

        if(!strcmp(input, ".word")) memoryPosition++;
        else if(!strcmp(input, ".wfill")) {
            long long int n;
            read_number_generic(&n);
            memoryPosition += n;
        }
        else if(!strcmp(input, ".align")) {
            long long int n;
            read_number_generic(&n);

            if(instructionPos == LEFT) {
                while(memoryPosition % n) {
                    _increment(true);
                }
            } else {

                _increment(false);
                while(memoryPosition % n) {
                    _increment(true);
                }
            }
        }
        else if(!strcmp(input, ".org")) {
            long long int n;
            read_number_generic(&n);
            _change_position(n);
        }
        read_junk();
        break;
    case COMMENT:
        treat_comment(input);
        break;
    case LABEL:

        treat_label(input);
        break;
    case INSTRUCTION:
        read_junk();
        _increment(false);
        break;
    case ERROR:
        break;
    case NONE:
        break;
    }
}
Example #5
0
string CLBuiltInMethod::getDeserialMethod(CLAbstractType * v_elementType ,string base_ptr )
{
	string t_type = identifyType(v_elementType);

	string t_strOff = to_string((long long )v_elementType->getOff());

	if(v_elementType->getPtrFlag()&&v_elementType->getArrFlag())
	{
		string t_strTypeLen = "8";	
		string t_arrSize = to_string((long long )v_elementType->getTypeLen() * (long long)v_elementType->getArrSize());	

		string ret = "("+t_type+" *)("+base_ptr+"["+t_strOff+"]) = new "+t_type+";\n\t";
		ret += "memcpy((char *)("+base_ptr+"["+t_strOff+"]),&in[m_buf_pos],"+t_strTypeLen+");\n\tm_buf_pos += "+t_strTypeLen+";\n\t";

		return ret;
	}
	else if(v_elementType->getArrFlag())
	{
		string t_strTypeLen = to_string((long long )v_elementType->getTypeLen() * (long long)v_elementType->getArrSize());	

		string ret = "memcpy(&"+base_ptr+"["+t_strOff+"],&in[m_buf_pos],"+t_strTypeLen+");\n\tm_buf_pos += "+t_strTypeLen+";\n\t";

		return ret;
	}
	else if(v_elementType->getPtrFlag())
	{
		string t_strTypeLen = to_string((long long )v_elementType->m_type_len);	

		string ret = "*((long *)(&"+base_ptr+"["+t_strOff+"])) = (long )new "+t_type+"[ (*(unsigned int *)(&"+base_ptr+"["+((CLBuiltInType *)v_elementType)->m_sizeOff+"]))];\n\t";
		ret += "memcpy((char *)*((long *)&("+base_ptr+"["+t_strOff+"])) ,&in[m_buf_pos],"+t_strTypeLen+"* (*(unsigned int *)(&"+base_ptr+"["+((CLBuiltInType *)v_elementType)->m_sizeOff+"])));\n\tm_buf_pos += "+t_strTypeLen+"* (*(unsigned int *)(&"+base_ptr+"["+((CLBuiltInType *)v_elementType)->m_sizeOff+"]));\n\t";

		return ret;
	}
	else
	{
		string t_strTypeLen = to_string((long long )v_elementType->getTypeLen());

		string ret = "*(("+t_type+" *)&"+base_ptr+"["+t_strOff+"]) = *(("+t_type+" *)&in[m_buf_pos]);\n\tm_buf_pos += "+t_strTypeLen+";\n\t";

		return ret;
	}
}
Example #6
0
 SbkObjectType* identifyType(void** cptr, SbkObjectType* type, SbkObjectType* baseType) const
 {
     Edges::const_iterator edgesIt = m_edges.find(type);
     if (edgesIt != m_edges.end()) {
         const NodeList& adjNodes = m_edges.find(type)->second;
         NodeList::const_iterator i = adjNodes.begin();
         for (; i != adjNodes.end(); ++i) {
             SbkObjectType* newType = identifyType(cptr, *i, baseType);
             if (newType)
                 return newType;
         }
     }
     void* typeFound = ((type->d && type->d->type_discovery) ? type->d->type_discovery(*cptr, baseType) : 0);
     if (typeFound) {
         // This "typeFound != type" is needed for backwards compatibility with old modules using a newer version of
         // libshiboken because old versions of type_discovery function used to return a SbkObjectType* instead of
         // a possible variation of the C++ instance pointer (*cptr).
         if (typeFound != type)
             *cptr = typeFound;
         return type;
     } else {
         return 0;
     }
 }