Package urban.shapes

Examples of urban.shapes.RuleGraph$WithHash


      Queue<RuleGraph> q = new LinkedList<RuleGraph>();
      q.add(merge);
     
      int i=1;
      while(!q.isEmpty()){
        RuleGraph graph = q.poll();
       
        Node root = graph.getRoot();
        if (root instanceof BondNode){
          Iterator<Entry<Link, RuleGraph>> children = sorted(graph.getChildren()).iterator();
          Entry<Link, RuleGraph> entry1 = children.next();
          Entry<Link, RuleGraph> entry2 = children.next();
         
          Node a = entry1.getValue().getRoot();
          Node b = entry2.getValue().getRoot();
          get(rhs,a).add(new Site(a.getName(), entry1.getKey().getDst(), null, ""+i));
          get(rhs,b).add(new Site(b.getName(), entry2.getKey().getDst(), null, ""+i));
          i++;
          q.add(entry1.getValue());
          q.add(entry2.getValue());
        } else {
          ordering.add(root);
          String agent = root.getName();
          List<Site> sitesL = get(lhs, root);
          List<Site> sitesR = get(rhs, root);
          addAll(sitesL, root.getSitesL());
          addAll(sitesR, root.getSitesR());
          for(Entry<Link, RuleGraph> e : sorted(graph.getChildren())){
            if (e.getValue() == null){
              String siteName = e.getKey().getSrc();
              sitesL.add(new Site(agent, siteName, null, "_"));
              sitesR.add(new Site(agent, siteName, null, "_"));         
            } else {
View Full Code Here


    if (r == null)
      return null;
   
    Data data = new Data(r.shape.getAgents());
   
    RuleGraph result = createRoot(r, data);
   
    fillDAG(data);
   
    return result;
  }
View Full Code Here

  private void fillDAG(Data data) {
    while(!data.q.isEmpty()){
      Pair<Agent,RuleGraph> p = data.q.poll();
      Agent aL = p.fst;
      RuleGraph current = p.snd;
      for(Site s : aL.getSites()){
        String m = s.getBindingMark();
        if (m != null && !"?".equals(m) && !"_".equals(m)){
          Pair<Agent,Site> p2 = data.getLinked(aL, m);
          if (p2 != null){
            Agent a = p2.fst;
            int indexOf = data.lhs.indexOf(a);
            if (data.rgArrays[indexOf] == null){
              data.rgArrays[indexOf] = new RuleGraph(new Node(a));
              data.q.add(pairOf(a,data.rgArrays[indexOf]));
            }
            RuleGraph value = data.rgArrays[indexOf];
            current.addChild(new Link(s.getName(),p2.snd.getName()), value);
          }
        }
        if ("_".equals(m)){
          current.addChild(new Link(s.getName(),"_"), null);
View Full Code Here

      }
    }
  }

  private RuleGraph createRoot(Shape.ShapePlusSite arg0, Data d) {
    RuleGraph rg;
    Site s = arg0.site;
    if (s.getState() == null){
      rg = new RuleGraph(new BondNode());
      RuleGraph r1 = new RuleGraph(new Node(arg0.agent));
      final Link key = new Link("1",s.getName());
      if (template == null){
        rg.addChild(key, r1);
        d.q.add(pairOf(arg0.agent, r1));
      } else {
        rg.addChild(key, template.getChildrenMap().get(key));
        rg.addChild(new Link("2",s.getName()), r1);
        d.q.add(pairOf(arg0.agent, r1));
      }
 
      Pair<Agent, RuleGraph> r2 = createRuleGraph(d, rg, arg0.agent, s);
      if (r2 != null && r2.fst != null)
        d.q.add(r2);
    } else {
      rg = new RuleGraph(new SiteNode(arg0.agent, s.getName(),s.getState()));
      d.q.add(pairOf(arg0.agent, rg));
    }
    return rg;
  }
View Full Code Here

  private Pair<Agent, RuleGraph> createRuleGraph(Data d, RuleGraph rg, Agent fst, Site s) {
    String bindingMark = s.getBindingMark();
 
    Pair<Agent,Site> other = d.getLinked(fst, bindingMark);
    if (other != null){
      RuleGraph r2 = new RuleGraph(new Node(other.fst));
      rg.addChild(new Link("2",other.snd.getName()), r2);
      return pairOf(other.fst, r2);
    }

    return null;
View Full Code Here

/**
* Transformer class that converts a rule to its generator
*/
public class RuleToGeneratorTransformer implements Transformer<Rule, Generator>{
  public Generator transform(Rule rule) {
    final RuleGraph graph = new RuleToRuleGraphTransformer().transform(rule);
         
    return new Generator(graph);
  }
View Full Code Here

    if (r == null)
      return null;
   
    Data data = new Data(r.getLhs(),r.getRhs());
   
    RuleGraph result = createRoot(r, data);
   
    fillDAG(data);
   
    return result;
  }
View Full Code Here

  private void fillDAG(Data data) {
    while(!data.q.isEmpty()){
      Pair<Agent,RuleGraph> p = data.q.poll();
      Agent aL = p.fst;
      RuleGraph current = p.snd;
      for(Site s : aL.getSites()){
        String m = s.getBindingMark();
        if (m != null && !"?".equals(m) && !"_".equals(m)){
          Agent a = getLinked(aL, m, data.first, data.second);
          if (a != null){
            int indexOf = data.lhs.indexOf(a);
            if (data.rgArrays[indexOf] == null){
              data.rgArrays[indexOf] = new RuleGraph(new Node(a));
              data.q.add(pairOf(a,data.rgArrays[indexOf]));
            }
            RuleGraph value = data.rgArrays[indexOf];
            current.addChild(new Link(s.getName(),getSiteName(a,m)), value);
          }
        }
        if ("_".equals(m)){
          current.addChild(new Link(s.getName(),"_"), null);
View Full Code Here

    }
  }


  private RuleGraph createRoot(Rule r, Data data) {
    RuleGraph result = null;
    {
      Agent aL = null;
      Agent bondA = null;
      Agent bondB = null;
      Site siteA = null;
      Site siteB = null;
     
      Iterator<Agent> rhsIt = data.rhs.iterator();
      Iterator<Agent> lhsIt = data.lhs.iterator();
      boolean reverse=false;
      while(lhsIt.hasNext() && rhsIt.hasNext()) {
        Agent a = lhsIt.next();
        Agent b = rhsIt.next();

        Iterator<Site> asIt = a.getSites().iterator();
        Iterator<Site> bsIt = b.getSites().iterator();
        while(asIt.hasNext() && bsIt.hasNext()){
          Site s = asIt.next();
          Site bs = bsIt.next();
         
          String m = s.getBindingMark();
          String n = bs.getBindingMark();
          if (m != null && !"?".equals(m) && !"_".equals(m)){
            if (data.first.containsKey(m))
              data.second.put(m, a);
            else
              data.first.put(m, a);
          }
          if ((m == null && n != null) || (n == null && m != null)){
            if (bondA != null){
              if(bondB != null)
                throw new IllegalArgumentException("Rule not supported: More than one bond formation dissallowed.");
              bondB = a;
              siteB = bs;
              if (m != null){
                data.first.remove(m);
                data.second.remove(m);
                reverse = true;
              }
            } else {
              bondA = a;
              siteA = bs;
            }
          }
         
          if (s.getState() != null && !s.getState().equals(bs.getState())){
            if (aL != null)
              throw new IllegalArgumentException("Rule not supported: More than one flip dissallowed.");
            aL = a;
          }
        } 
      }
      if (aL == null && bondA == null)
        throw new IllegalArgumentException("At least one site should differ");
      if (aL != null && bondA != null)
        throw new IllegalArgumentException("Rule not supported: Either flip or bond, not both.");       
       
      if (bondA == null){
        int indexOf = data.lhs.indexOf(aL);
        Agent aR = data.rhs.get(indexOf);
        result = data.rgArrays[indexOf] = new RuleGraph(new SiteNode(aL, aR));
        data.q.add(pairOf(aL, data.rgArrays[indexOf]));
      } else {
        result = new RuleGraph(new BondNode());
        int i=0;
       
        i = data.lhs.indexOf(bondA);
        RuleGraph r1 = data.rgArrays[i] = new RuleGraph(new Node(reverse ? data.rhs.get(i) : bondA));
        result.addChild(new Link("1",siteA.getName()), r1);

        i = data.lhs.indexOf(bondB);
        RuleGraph r2 = data.rgArrays[i] = new RuleGraph(new Node(reverse ? data.rhs.get(i) : bondB));
        result.addChild(new Link("2",siteB.getName()), r2);       

        data.q.add(pairOf(bondA, r1));
        data.q.add(pairOf(bondB, r2));
      }
View Full Code Here

  @Test
  public void testTransform() throws RecognitionException{
    String rule = "B(a!1, c),A(b!1, c!2),C(a!2, b) <-> B(a!1, c!3),A(b!1, c!2),C(a!2, b!3) @ 0, 0\n";
    String expected = "B(a!1, c),C(a!2, b),A(b!1, c!2) <-> B(a!1, c!2),C(a!3, b!2),A(b!1, c!3) @ 0, 0\n";
   
    RuleGraph graph = new RuleToRuleGraphTransformer().transform(parse(rule));
    assertEquals(expected, new RuleGraphToRuleTransformer().transform(graph).toString());
  }
View Full Code Here

TOP

Related Classes of urban.shapes.RuleGraph$WithHash

Copyright © 2018 www.massapicom. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.