Package primitives.cluster

Source Code of primitives.cluster.ClusterLeaf

/*
* Copyright (c) 2010 Mathew Hall, University of Sheffield.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or
* without modification, are permitted provided that the following conditions
* are met:
*
* Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* Redistributions in binary form must reproduce the above
* copyright notice, this list of conditions and the following
* disclaimer in the documentation and/or other materials provided
* with the distribution.
*
* Neither the name of the University of Sheffield nor the names of its
* contributors may be used to endorse or promote products derived
* from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
* CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
*/
package primitives.cluster;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import primitives.graph.Node;

/**
* Leaf of clustering tree - stores list of nodes in this partition.
* @author mat
*/
public class ClusterLeaf  implements IClusterLevel, Serializable{
  //XXX: NOOOOOO! Had to change this again.
  private static final long serialVersionUID = 0xBEEFB00C; //-3881436014264360147L;//-3238039936487263L;
 
  private Node node;
  private Set<Integer> id;
 
 
 

  public void setId(int id) {
    this.id.add(id);
//    this.id.remove(-1);
  }
 
  public List<ClusterLeaf> getLeaves(){
    ArrayList<ClusterLeaf> ret = new ArrayList<ClusterLeaf>();
    ret.add(this);
    return ret;
  }

  public ClusterLeaf deepCopy(){
    ClusterLeaf newMe = new ClusterLeaf();

    newMe.node = node.clone();

    for(Integer i : id){
      newMe.setID(i);
    }
    return newMe;
  }
 
  /**
   *
   * @return a HashSet of one element containing the node stored in this leaf.
   */
  public Set<Node> getNodes(){
    HashSet<Node> temp = new HashSet<Node>();
    temp.add(node);
    return temp;
  }
 
  public void getNodes(Set<Node> to){
    to.add(node);
  }
 
  /**
   * Get the size of the leaf. Leaves only store between 0 and 1 objects
   * @return 1 if this leaf contains a node.
   */
  public int getSize(){
    return (node==null)?0:1;
  }
 
  @Override
  public String toString() {
     return String.format("\n\tClusterLeaf\t{%s}",node);



  }

  public ClusterLeaf(){
    node = new Node();
    id = new HashSet<Integer>();
    id.add(-1);
  }
 
  public void addNode(Node n){
    node = n;
  }
 
  public boolean encapsulates(){  return false; }


 
  public boolean contains(Node n){
     return node.equals(n);
  }
 
  public boolean knownAs(int i){
     return id.contains(i);
  }
 
  /**
   * Determines if a node x in this cluster exists such that x -> n
   * @param n the node to search for connectivity to
   * @ return true if there is an edge between a node in this cluster and the parameter
   */
  public boolean connectivityTo(Node n){

    if(node.getTransitionsAsN().contains(n)) return true;
    return false;
  }
 
  /**
   * Determines if a node x in this cluster exists such that n -> x
   * @param n the node to search for connectivity from
   * @ return true if there is an edge between the parameter and this cluster
   */
  public boolean connectivityFrom(Node n){
    for(Node a : n.getTransitionsAsN())
      if(node.equals(a)) return true;
     return false;
   
   
  }
  /**
   * Determines if a node has a transition between this cluster in either direction.
   * @param n the node to search for connectivity with
   * @ return true if there is an edge between this cluster and the parameter.
   */
  public boolean connectivityBidir(Node n){
     return connectivityFrom(n) || connectivityTo(n);
 
  }
 
  public ClusterLeaf getCluster(){
     return this;
  }

  public Set<Integer> getIDs(){
             return id;
            // return new HashSet<Integer>(id);
                //HashSet<Integer> copy = (HashSet<Integer>)id;
                // return (Set<Integer>)(copy.clone());
  }

  /* TODO: does this method even get used in ClusterLeaf? */
  public void setID(int i){
    id.add(i);
//    id.remove(-1);
  }
}
TOP

Related Classes of primitives.cluster.ClusterLeaf

TOP
Copyright © 2018 www.massapi.com. 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.