bool SeqTreeAsnizer::addAsnSeqTreeNode(const AlignmentCollection& ac, const SeqTree& seqTree, SeqTreeIterator cursor, CSeqTree_node& asnNode) { // add cursor as a child of asnNode list< CRef< CSeqTree_node > >& childList = asnNode.SetChildren().SetChildren(); CRef< CSeqTree_node > nodeRef(new CSeqTree_node); fillAsnSeqTreeNode(ac, cursor, nodeRef.GetObject()); childList.push_back(nodeRef); //add the children of cursor as children of nodeRef SeqTree::sibling_iterator sit = cursor.begin(); while (sit != cursor.end()) { addAsnSeqTreeNode(ac, seqTree, sit, nodeRef.GetObject()); ++sit; } return true; }
NodeRef NodeStore::add(Node *node) { Mutex::AutoLocker l(mutex); if (!node) return NULL; if (_stored(*node)) { HAGGLE_DBG("Node %s is already in node store\n", node->getIdStr()); return NULL; } HAGGLE_DBG("Adding new node to node store %s\n", node->getIdStr()); NodeRef nodeRef(node); nodeRef->setStored(); push_back(new NodeRecord(nodeRef)); return nodeRef; }
void parseLine(xmlNodePtr root_node, SHAPE *shape) { int i, l, m, v; int k = 0; int n = -1; int o = -1; int start_vertex, end_vertex; char val[1024]; xmlNodePtr osmWay; SHPObject *obj = NULL; NODE node; KEYVAL tags; for (i = 0; i < shape->num_entities; i++) { obj = SHPReadObject(shape->handleShp, k); for (m = 0; m < obj->nParts; m++) { osmWay = wayElement(o); if (m == obj->nParts-1) { // is linestring end_vertex = obj->nVertices; } else { // is multilinestring end_vertex = obj->panPartStart[m+1]; } start_vertex = obj->panPartStart[m]; for (v = start_vertex; v < end_vertex; v++) { node.id = n; node.x = obj->padfX[v]; node.y = obj->padfY[v]; xmlAddChild(root_node, nodeElement(node)); xmlAddChild(osmWay, nodeRef(node)); n--; } if (shape->num_fields > 0) { // has tags for (l = 0; l < shape->num_fields; l++) { setKey(&tags, shape->field_names[l]); // set tag value snprintf(val, 1024, "%s", DBFReadStringAttribute(shape->handleDbf, k, l)); setValue(&tags, val); xmlAddChild(osmWay, tagElement(&tags)); } } xmlAddChild(root_node, osmWay); o--; } k++; } }