dState (const dList<dItem>& itemSet) :m_key(0), m_number(0), m_hasErroItem(false), m_goto(), m_actions(), m_transitions() { for (dListNode* node = itemSet.GetFirst(); node; node = node->GetNext()) { AddItem (node->GetInfo()); } }
void dBone::Save(const char* fileName, const dList<dBone*>& list) { TiXmlText* header; TiXmlElement *root; TiXmlDeclaration* decl; TiXmlDocument out (fileName); decl = new TiXmlDeclaration( "1.0", "", "" ); out.LinkEndChild( decl ); root = new TiXmlElement( "root" ); out.LinkEndChild(root); header = new TiXmlText (XML_HEADER); root->LinkEndChild(header); for (dList<dBone*>::dListNode* node = list.GetFirst(); node; node = node->GetNext()) { int stack; TiXmlElement *skeleton; const dBone* nodeArray[1024]; skeleton = new TiXmlElement( "skeleton" ); stack = 1; nodeArray[0] = node->GetInfo(); while (stack) { const char* name; const dBone* node; TiXmlElement* xmlNode; stack --; node = nodeArray[stack]; name = node->GetName(); xmlNode = new TiXmlElement( "bone" ); skeleton->LinkEndChild(xmlNode); xmlNode->SetAttribute("name", name); if (node->GetParent()) { const char* parentName; parentName = node->GetParent()->GetName(); xmlNode->SetAttribute("parent", parentName); } xmlNode->SetAttribute("boneID", node->GetBoneID()); char matrixBuffer[512]; dModel::FloatsToString (matrixBuffer, &node->m_localMatrix[0][0], 16); xmlNode->SetAttribute("matrix", matrixBuffer); for (node = node->GetChild(); node; node = node->GetSibling()) { nodeArray[stack] = node; stack ++; } } root->LinkEndChild(skeleton); } out.SaveFile (fileName); }
void dDataFlowGraph::GetLoops (dList<dLoop>& loops) const { for (dCIL::dListNode* node = m_function; node; node = node->GetNext()) { dThreeAdressStmt& stmt = node->GetInfo(); if ((stmt.m_instruction == dThreeAdressStmt::m_nop) && (stmt.m_arg2.m_label == D_LOOP_HEADER_SYMBOL)) { dList<dLoop>::dListNode* const loopNode = loops.Addtop(); dLoop& loop = loopNode->GetInfo(); loop.m_head = node; int order = stmt.m_extraInformation; for (dList<dLoop>::dListNode* root = loops.GetLast(); root != loops.GetFirst(); root = root->GetPrev()) { int code = root->GetInfo().m_head->GetInfo().m_extraInformation; if (code > order) { loops.InsertAfter (root, loopNode); break; } } for (dCIL::dListNode* node1 = node->GetNext(); node1; node1 = node1->GetNext()) { dThreeAdressStmt& stmt = node1->GetInfo(); int code = stmt.m_extraInformation; if ((stmt.m_instruction == dThreeAdressStmt::m_nop) && (code == order) && (stmt.m_arg2.m_label == D_LOOP_TAIL_SYMBOL)) { loop.m_tail = node1; break; } } } } }
dCILInstrPhy::dCILInstrPhy (dCIL& program, const dString& name, const dArgType& type, const dBasicBlock* const basicBlock, dList<const dBasicBlock*>& sources) :dCILSingleArgInstr(program, dArg(name, type)) { m_basicBlock = (dBasicBlock*)basicBlock; for (dList<const dBasicBlock*>::dListNode* node = sources.GetFirst(); node; node = node->GetNext()) { m_sources.Append (dArgPair (m_arg0, node->GetInfo())); } }
dCILInstrCall::dCILInstrCall(dCIL& program, const dString& returnValue, const dArgType& type, const dString& target, dList<dArg>& parameters) :dCILTwoArgInstr (program, dArg (returnValue, type), dArg (target, dArgType())) ,m_tagetNode(NULL) { for (dList<dArg>::dListNode* node = parameters.GetFirst(); node; node = node->GetNext()) { m_parameters.Append (node->GetInfo()); } }
dCILInstrPhy::dCILInstrPhy (dCIL& program, const dString& name, const dArgType& type, dList<dCILInstr*>& source, const dBasicBlock* const basicBlock) :dCILSingleArgInstr(program, dArg(name, type)) { m_basicBlock = (dBasicBlock*)basicBlock; for (dList<dCILInstr*>::dListNode* node = source.GetFirst(); node; node = node->GetNext()) { dCILInstr* const instruction = node->GetInfo(); m_sources.Append (instruction->GetNode()); } }
bool dDeterministicFiniteAutonata::CompareSets (dList<dAutomataState*>& setA, dTree<dAutomataState*,dAutomataState*>& setB) const { if (setA.GetCount() == setB.GetCount()) { for (dList<dAutomataState*>::dListNode* node = setA.GetFirst(); node; node = node->GetNext()) { if (!setB.Find(node->GetInfo())) { return false; } } return true; } return false; }
bool dDataFlowGraph::IsStatementInReachList(dCIL::dListNode* const node, dList<dCIL::dListNode*>& definitionList, dCIL::dListNode* const me) const { const dDataFlowPoint& point = m_dataFlowGraph.Find (node)->GetInfo(); for (dList<dCIL::dListNode*>::dListNode* ptr = definitionList.GetFirst(); ptr; ptr = ptr->GetNext()) { dCIL::dListNode* const defVarStmt = ptr->GetInfo(); if (defVarStmt != me) { if (point.m_reachStmtInputSet.Find(defVarStmt)) { return true; } } } return false; }
void dParserCompiler::First ( const dList<dCRCTYPE>& symbolSet, const dTree<dTokenInfo, dCRCTYPE>& symbolList, const dTree<dList<void*>, dCRCTYPE>& ruleMap, dTree<int, dCRCTYPE>& firstSetOut) const { if (symbolSet.GetCount() > 1) { dList<dCRCTYPE>::dListNode* node = symbolSet.GetFirst(); bool deriveEmpty = true; while ((deriveEmpty) && node) { dCRCTYPE symbol = node->GetInfo(); node = node->GetNext(); dTree<int, dCRCTYPE> tmpFirst; dTree<int, dCRCTYPE> symbolListMark; First (symbol, symbolListMark, symbolList, ruleMap, tmpFirst); dTree<int, dCRCTYPE>::Iterator iter (tmpFirst); deriveEmpty = false; for (iter.Begin(); iter; iter ++) { dCRCTYPE symbol = iter.GetKey(); if (symbol == 0) { deriveEmpty = true; } else { firstSetOut.Insert(0, symbol); } } } if (deriveEmpty) { firstSetOut.Insert(0, 0); } } else { dCRCTYPE symbol = symbolSet.GetFirst()->GetInfo(); dTree<int, dCRCTYPE> symbolListMark; First (symbol, symbolListMark, symbolList, ruleMap, firstSetOut); } }