예제 #1
0
void CECTag::DebugPrint(int level, bool print_empty) const
{
	if (m_dataLen || print_empty) {
		wxString space;
		for (int i = level; i--;) space += wxT("  ");
		wxString s1 = CFormat(wxT("%s%s %d = ")) % space % GetDebugNameECTagNames(m_tagName) % m_dataLen;
		wxString s2;
		switch (m_tagName) {
			case EC_TAG_DETAIL_LEVEL:
				s2 = GetDebugNameEC_DETAIL_LEVEL(GetInt()); break;
			case EC_TAG_SEARCH_TYPE:
				s2 = GetDebugNameEC_SEARCH_TYPE(GetInt()); break;
			case EC_TAG_STAT_VALUE_TYPE:
				s2 = GetDebugNameEC_STATTREE_NODE_VALUE_TYPE(GetInt()); break;
			default:
				switch (m_dataType) {
					case EC_TAGTYPE_UINT8:
					case EC_TAGTYPE_UINT16:
					case EC_TAGTYPE_UINT32:
					case EC_TAGTYPE_UINT64:
						s2 = CFormat(wxT("%d")) % GetInt(); break;
					case EC_TAGTYPE_STRING:
						s2 = GetStringData(); break;
					case EC_TAGTYPE_DOUBLE:
						s2 = CFormat(wxT("%.1f")) % GetDoubleData(); break;
					case EC_TAGTYPE_HASH16:
						s2 = GetMD4Data().Encode(); break;
					case EC_TAGTYPE_CUSTOM:
						if (m_dataLen == 0) {
							s2 = wxT("empty");
						} else {
							// Make a hex dump (limited to maxOutput)
							const uint32 maxOutput = 50;
							for (uint32 i = 0; i < m_dataLen; i++) {
								if (i == maxOutput) {
									s2 += wxT("...");
									break;
								}
								s2 += CFormat(wxT("%02X ")) % (unsigned char) m_tagData[i];
							}
						}
						break;
					default:
						s2 = GetDebugNameECTagTypes(m_dataType);
				}
		}
		DoECLogLine(s1 + s2);
	}
	for (TagList::const_iterator it = m_tagList.begin(); it != m_tagList.end(); ++it) {
		it->DebugPrint(level + 1, true);
	}
}
예제 #2
0
//Fileinput
int Gene::Interpreter(string DataName, string& DataItem, bool Input) {
	int DataID = TranslateFileHeader(DataName,GENE);
	
	if (DataID == -1) {
		AddData(DataName.data(),DataItem.data(),STRING);
		//FErrorFile() << "UNRECOGNIZED REFERENCE: " << GetData("FILENAME",STRING) << " data reference: " << DataName << " not recognized." << endl;
		//FlushErrorFile();
		return FAIL;
	}
	
	switch (DataID) {
		case GENE_DBLINK: {
			if (Input) {
				AddData(DataName.data(),DataItem.data(),DATABASE_LINK);
			} else {
				DataItem = GetAllDataString(DataName.data(),DATABASE_LINK);
			}
			break;
		} case GENE_COORD: {
			if (Input) {
				vector<string>* Strings = StringToStrings(DataItem,".");
				if (Strings->size() >= 2) {
					AddData("START COORD",atof((*Strings)[0].data()));
					AddData("END COORD",atof((*Strings)[1].data()));
				}
				delete Strings;
			} else {
				double Start = GetDoubleData("START COORD");
				double End = GetDoubleData("END COORD");
				if (Start != FLAG && End != FLAG) {
					DataItem.assign(dtoa(Start));
					DataItem.append("..");
					DataItem.append(dtoa(End));

				}
			}
			break;
		} case GENE_REACTION: {
			if (Input) {
				//Do nothing... reactions will add themselves to the genes
			} else {
				for (int i=0; i < int(ReactionList.size()); i++) {
					DataItem.append(ReactionList[i]->GetData("DATABASE",STRING));
					if (i < int(ReactionList.size()-1)) {
						DataItem.append("\t");
					}
				}
			}
			break;
		} case GENE_PARALOG: {
			if (Input) {
				vector<string>* Strings = StringToStrings(DataItem,"\t ");
				for (int i=0; i < int(Strings->size()); i += 2) {
					if (AddData("PARALOGS",(*Strings)[i].data(),STRING)) {;
						AddData("PARA SIMS",atof((*Strings)[i+1].data()),false);
					}
				}
				delete Strings;
			} else {
				vector<string> AllParalogs = GetAllData("PARALOGS",STRING);
				vector<double> AllSims = GetAllData("PARA SIMS");
				for (int i=0; i < int(AllParalogs.size()); i++) {
					DataItem.append(AllParalogs[i]);
					DataItem.append(" ");
					DataItem.append(dtoa(AllSims[i]));
					if (i < int(AllParalogs.size()-1)) {
						DataItem.append("\t");
					}
				}
			}
			break;
		} case GENE_ORTHOLOG: {
			if (Input) {
				vector<string>* Strings = StringToStrings(DataItem,"\t ");
				for (int i=0; i < int(Strings->size()); i += 2) {
					if (AddData("ORTHOLOGS",(*Strings)[i].data(),STRING)) {;
						AddData("ORTHO SIMS",atof((*Strings)[i+1].data()),false);
					}
				}
				delete Strings;
			} else {
				vector<string> AllParalogs = GetAllData("ORTHOLOGS",STRING);
				vector<double> AllSims = GetAllData("ORTHO SIMS");
				for (int i=0; i < int(AllParalogs.size()); i++) {
					DataItem.append(AllParalogs[i]);
					DataItem.append(" ");
					DataItem.append(dtoa(AllSims[i]));
					if (i < int(AllParalogs.size()-1)) {
						DataItem.append("\t");
					}
				}
			}
			break;
		} case GENE_DOUBLE: {
			if (Input) {
				AddData(DataName.data(),DataItem.data(),DOUBLE);
			} else {
				DataItem = GetAllDataString(DataName.data(),DOUBLE);
			}
			break;
		} case GENE_STRING: {
			if (Input) {
				AddData(DataName.data(),DataItem.data(),STRING);
			} else {
				DataItem = GetAllDataString(DataName.data(),STRING);
			}
			break;
		} case GENE_QUERY: {
			if (Input) {
				if (GetParameter("save query data on input").compare("1") == 0) {
					AddData(DataName.data(),DataItem.data(),STRING);
				}
			} else {
				DataItem = Query(DataName);
			}
			break;
		} case GENE_LOAD: {
			if (Input) {
				LoadGene(DataItem);			
			} else {
				DataItem = GetData("DATABASE",STRING);
			}
			break;
		} default: {
			//FErrorFile() << "UNRECOGNIZED DATA ID: Data ID: " << DataID << " input for data reference: " << DataName << " not recognized. Check gene code.";
			//FlushErrorFile();
			return FAIL;
		}
	}	
	
	return SUCCESS;
}