示例#1
0
static void
merge (Node *parent, Node *child, Arc *newArc) 
{
	Arc *oldArc;
	Node *current = child, *oldParent, *newParent = parent;

#ifdef STATS
	++ numMergers;
#endif

	while (current->parent) 
	{
		oldArc = current->arcToParent;
		current->arcToParent = newArc;
		oldParent = current->parent;
		breakRelationship (oldParent, current);
		addRelationship (newParent, current);
		newParent = current;
		current = oldParent;
		newArc = oldArc;
		newArc->direction = 1 - newArc->direction;
	}

	current->arcToParent = newArc;
	addRelationship (newParent, current);
}
Autolayout::Graph  * Autolayout::AutolayouterAdapter::setGraph( UMLView * view )
  {
  if (! view) return 0;
  Autolayout::Graph * g=getGraph();
  if (g&&g->empty())
    {
    UMLWidgetList list = view->getWidgetList();
    UMLWidget* widget;
    for ( widget = list.first(); widget; widget= list.next() )
      {
      if (widget->getBaseType() == Uml::wt_Class)
        {


        g->addNode(widget->getID().c_str(),widget->getWidth(),
                   widget->getHeight());
        }
      }
    AssociationWidgetList as_list=view->getAssociationList();
    AssociationWidget* assoc;
    AssociationWidgetListIt it(as_list);
    while ( (assoc = it.current()) != 0 )
      {
      ++it;
      addRelationship(assoc);
      }
    }
  return g;
  }
示例#3
0
void FamilyTree::loadGEDCOM(const char* iFileName)
{
    lube::filemodule gm("ged");
    lube::file& vf = gm.create();
    var ged = vf.read(iFileName);

    std::cout << "Individuals: " << ged["Individual"].size() << std::endl;
    std::cout << "Families: " << ged["Family"].size() << std::endl;

    // Add to graph
    for (int i=0; i<ged["Individual"].size(); i++)
    {
        // Rely on vertex, returned by add_vertex(), just being an
        // integer that increments with each call.
        vertex v = addIndividual();
        if ((int)v != i)
            throw std::runtime_error(
                "FamilyTree::loadGEDCOM: vertex out of order"
            );
        var& ind = getIndividual(v);
        ind = ged["Individual"][i];
    }
    for (int i=0; i<ged["Family"].size(); i++)
    {
        var f = ged["Family"][i];
        var h = f.at("HUSB");
        var w = f.at("WIFE");
        h.dereference();
        w.dereference();
        for (int c=0; c<f["CHIL"].size(); c++)
        {
            var k = f["CHIL"][c];
            if (h)
                addRelationship(h.cast<int>(), k.cast<int>());
            if (w)
                addRelationship(w.cast<int>(), k.cast<int>());
        }
    }
}
示例#4
0
void Relationships::addWorksheetRelationship(const QString &relativeType, const QString &target, const QString &targetMode)
{
    addRelationship(schema_doc + relativeType, target, targetMode);
}
示例#5
0
void Relationships::addPackageRelationship(const QString &relativeType, const QString &target)
{
    addRelationship(schema_package + relativeType, target);
}