/*
 * GList.java
 *
 * Created on July 7, 2009, 3:16 PM
 *
 * To change this template, choose Tools | Template Manager
 * and open the template in the editor.
 */

/**
 *
 * @author Khalegh
 */
public class VennList {
    private int size;
    VennNode head;
    
    /** Creates a new instance of GList */
    public VennList() {
        head = null;
        size = 0;
    }
    
    
    public void add(Venn venn) {
        VennNode node = new VennNode(venn);
        //venn.printCodes();
        if (head == null) {
            head = node;
            size++;
            return;
        }
        
        VennNode prev = head;
        VennNode curr = head;
        
        while (curr != null) {
            int c = venn.compareTo(curr.item);
            if (c == 0) {
                venn.setNo(curr.item.getNo());
                return;
            }
            if (c < 0) {
                if (curr == head) {
                    node.next = head;
                    head = node;
                } else {
                    node.next = prev.next;
                    prev.next = node;
                }
                size++;
                return;
            }
            prev = curr;
            curr = curr.next;
        }
        
        prev.next = node;
        size++;
        return;
    }
    
    public int size() {
        return size;
    }
        
    public Venn getVenn(int index) {
        VennNode node = head;
        
        for (int i = 0; i < index; i++) {
            node = node.next;
        }
        
        return node.item;
    }
    
    private class VennNode {
        private Venn item;
        private VennNode next;
        
        public VennNode(Venn item, VennNode next) {
            this.item = item;
            this.next = next;
        }
        
        public VennNode(Venn item) {
            this.item = item;
            this.next = null;
        }
    }
}
