dSceneGraph::dSceneGraph(const dSceneGraph& me) :dTree<dGraphNode, unsigned>(), m_lru (0) { // add all nodes from me, Iterator iter (me); for (iter.Begin(); iter; iter ++) { dGraphNode& srcNode = iter.GetNode()->GetInfo(); AddNode (srcNode.m_nodeInfo, NULL); } //now connect all edges for (iter.Begin(); iter; iter ++) { dGraphNode& srcNode = iter.GetNode()->GetInfo(); dGraphNode& myNode = Find(srcNode.m_nodeInfo->GetUniqueID())->GetInfo(); for (dGraphNode::dLink::dListNode* srcEdge = srcNode.m_children.GetFirst(); srcEdge; srcEdge = srcEdge->GetNext()) { dGraphNode& srcLinkNode = srcEdge->GetInfo()->GetInfo(); dTreeNode* myLinkNode = Find(srcLinkNode.m_nodeInfo->GetUniqueID()); //myNode.m_children.Append(srcEdge->GetInfo()); myNode.m_children.Append(myLinkNode); } for (dGraphNode::dLink::dListNode* srcEdge = srcNode.m_parents.GetFirst(); srcEdge; srcEdge = srcEdge->GetNext()) { dGraphNode& srcLinkNode = srcEdge->GetInfo()->GetInfo(); dTreeNode* myLinkNode = Find(srcLinkNode.m_nodeInfo->GetUniqueID()); //myNode.m_parents.Append(srcEdge->GetInfo()); myNode.m_parents.Append(myLinkNode); } } m_rootNode = Find(me.GetRootNode()->GetInfo().GetNode()->GetUniqueID()); }
void RemoveById (GLuint id) { Iterator iter (*this); for (iter.Begin(); iter; iter ++) { if (iter.GetNode()->GetInfo().m_textureID == id) { Remove (iter.GetNode()); break; } } }
const char* FindById (GLuint id) const { Iterator iter (*this); for (iter.Begin(); iter; iter ++) { if (iter.GetNode()->GetInfo().m_textureID == id) { return iter.GetNode()->GetInfo().m_textureName; } } return NULL; }
dTreeNode* FindById (GLuint id) const { Iterator iter (*this); for (iter.Begin(); iter; iter ++) { if (iter.GetNode()->GetInfo().m_textureID == id) { //return iter.GetNode()->GetInfo().m_textureName.GetStr(); return iter.GetNode(); } } return NULL; }
void Erase(Iterator pos){ Node* remNode = pos.GetNode(); for(Iterator itr = begin(); itr != end(); ++itr){ if(itr.GetNode()->mNext != remNode) continue; itr.GetNode()->mNext = remNode->mNext; --mCount; if(remNode == mLast) mLast = itr.GetNode(); delete remNode; return; } }
void RemoveById (GLuint id) { Iterator iter (*this); for (iter.Begin(); iter; iter ++) { TextureEntry& entry = iter.GetNode()->GetInfo(); if (entry.m_textureID == id) { if (entry.GetRef() == 1) { glDeleteTextures(1, &id); Remove (iter.GetNode()); } break; } } }
polynomial operator -(const polynomial &p1) { polynomial negated; Iterator<polyterm> P = p1.Begin(); while(P.GetNode() != NULL) { Node<polyterm> negTerm = -(*P.GetNode()); negated.Append(negTerm.Copy()); P.Next(); } return negated; }
polynomial& operator +(const polynomial &p1, const polynomial &p2) { polynomial* p3 = new polynomial; *p3 = p1; Iterator<polyterm> P = p2.Begin(); while(P.GetNode() != NULL) { *p3+=*P.GetNode(); P.Next(); } return *p3; }
T& operator[](const char* key){ Iterator itr = find(key); Node* node = itr.GetNode(); if(!node) itr = add(key, T()); return (*itr); }
~TextureCache () { Iterator iter (*this); for (iter.Begin(); iter; iter ++) { glDeleteTextures(1, &iter.GetNode()->GetInfo().m_textureID); } }
void dgDeadJoints::DestroyJoints(dgWorld& world) { dgSpinLock (&m_lock); Iterator iter (*this); for (iter.Begin(); iter; iter++) { dgTreeNode* const node = iter.GetNode(); dgConstraint* const joint = node->GetInfo(); world.DestroyConstraint (joint); } RemoveAll (); dgSpinUnlock(&m_lock); }
Iterator Find(const char* key) const { if(!key) return Iterator(0); Hash hash = Hash::Generate(key); Node* node = 0; for(Iterator itr = Begin(); itr != End(); ++itr){ if(itr.GetHash() != hash) continue; node = itr.GetNode(); break; } return Iterator(node); }
void NewtonDeadJoints::DestroyJoints(Newton& world) { Iterator iter (*this); for (iter.Begin(); iter; ) { dgTreeNode* const node = iter.GetNode(); iter ++; dgConstraint* const joint = node->GetInfo(); if (joint) { Remove (node); world.DestroyConstraint (joint); } } }
void NewtonDeadBodies::DestroyBodies(Newton& world) { Iterator iter (*this); for (iter.Begin(); iter; ) { dgTreeNode* const node = iter.GetNode(); iter ++; dgBody* const body = node->GetInfo(); if (body) { Remove (node); world.DestroyBody(body); } } }
void dgDeadBodies::DestroyBodies(dgWorld& world) { dgSpinLock (&m_lock); Iterator iter (*this); for (iter.Begin(); iter; iter++) { dgTreeNode* const node = iter.GetNode(); dgBody* const body = node->GetInfo(); world.DestroyBody(body); } RemoveAll (); dgSpinUnlock(&m_lock); }
//} ostream& operator <<(ostream& out,const polynomial& A) { //cout << "AHEAD = " << *A.head; //node *walker = A.head; Iterator<polyterm> P = A.Begin(); while(P.GetNext() != NULL) { if(P.GetNode()->GetData().Coef() == 0) { cout << ""; // walker=walker->next; P.GetNext(); } else { if(P.GetNext()->GetData().Coef() > 0) { out << P; cout << " + "; //walker = walker->next; P.Next(); } else if(P.GetNext()->GetData().Coef()<0) { out << P; //walker = walker->next; P.Next(); } else if(P.GetNext()->GetData().Coef()==0) { out << P; out << " + "; //walker = walker->next; P.Next(); } } } out << P; //P.Next(); return out; }
polynomial& polynomial::operator +=(const Node<polyterm> &a) { //cout << "+= " << a << endl; Iterator<polyterm> P = this->Search(a.Copy()); if(P.GetNode() != NULL) { Node<polyterm>* oldTerm = this->Remove(P); //cout << "oldTerm " << *oldTerm << endl; Node<polyterm> newTerm = *oldTerm + a; //cout << "newTerm " << newTerm << endl; this->InsertSorted(newTerm.Copy()); //cout << "newPoly = " << *this << endl; } else { this->InsertSorted(a.Copy()); } return *this; }
void dSceneGraph::Serialize (TiXmlElement* rootNode) const { // save scenes nodes TiXmlElement* nodes = new TiXmlElement ("nodes"); rootNode->LinkEndChild(nodes); dTree<int, dTreeNode*> enumerator; int index = 0; Iterator iter (*this); for (iter.Begin(); iter; iter ++) { dTreeNode* node = iter.GetNode(); //dNodeInfo* info = node->GetInfo().GetNode(); enumerator.Insert (index, node); index ++; } nodes->SetAttribute("count", index); int indexList[D_GRAPH_MAX_STACK_DEPTH]; char text[D_GRAPH_MAX_STACK_DEPTH * 32]; for (iter.Begin(); iter; iter ++) { dTreeNode* node = iter.GetNode(); // TiXmlElement* infoNode = node->GetInfo().GetNode()->Serialize(nodes); dNodeInfo* info = node->GetInfo().GetNode(); TiXmlElement* infoNode = new TiXmlElement (info->GetClassName()); nodes->LinkEndChild(infoNode); info->Serialize (infoNode); _ASSERTE (infoNode); int nodeCount = 0; for (dGraphNode::dLink::dListNode* edgeNode = node->GetInfo().m_parents.GetFirst(); edgeNode; edgeNode = edgeNode->GetNext()) { dTree<int, dTreeNode*>::dTreeNode* edge = enumerator.Find (edgeNode->GetInfo()); _ASSERTE (edge); // if (edge) { indexList[nodeCount] = edge->GetInfo(); nodeCount ++; _ASSERTE (nodeCount < (sizeof (indexList) / sizeof (indexList[0]))); // } } if (nodeCount) { dIntArrayToString (indexList, nodeCount, text, sizeof (text)); TiXmlElement* parent = new TiXmlElement ("parentNodes"); parent->SetAttribute("count", nodeCount); parent->SetAttribute("indices", text); infoNode->LinkEndChild(parent); } nodeCount = 0; for (dGraphNode::dLink::dListNode* edgeNode = node->GetInfo().m_children.GetFirst(); edgeNode; edgeNode = edgeNode->GetNext()) { dTree<int, dTreeNode*>::dTreeNode* edge = enumerator.Find (edgeNode->GetInfo()); _ASSERTE (edge); // if (edge) { indexList[nodeCount] = edge->GetInfo(); nodeCount ++; _ASSERTE (nodeCount < (sizeof (indexList) / sizeof (indexList[0]))); // } } if (nodeCount) { dIntArrayToString (indexList, nodeCount, text, sizeof (text)); TiXmlElement* parent = new TiXmlElement ("childrenNodes"); parent->SetAttribute("count", nodeCount); parent->SetAttribute("indices", text); infoNode->LinkEndChild(parent); } } }