001    package org.maltparser.core.syntaxgraph;
002    
003    import java.util.Observer;
004    
005    import org.maltparser.core.exception.MaltChainedException;
006    import org.maltparser.core.pool.ObjectPoolList;
007    import org.maltparser.core.symbol.SymbolTableHandler;
008    /**
009    *
010    *
011    * @author Johan Hall
012    */
013    public abstract class SyntaxGraph implements LabeledStructure, Structure, Observer {
014            protected SymbolTableHandler symbolTables;
015            protected ObjectPoolList<LabelSet> labelSetPool;
016            protected int numberOfComponents;
017            
018            public SyntaxGraph(SymbolTableHandler symbolTables) throws MaltChainedException  {
019                    setSymbolTables(symbolTables);
020                    labelSetPool = new ObjectPoolList<LabelSet>() {
021                            protected LabelSet create() { return new LabelSet(6); }
022                            public void resetObject(LabelSet o) throws MaltChainedException { o.clear(); }
023                    };      
024            }
025            
026            public SymbolTableHandler getSymbolTables() {
027                    return symbolTables;
028            }
029    
030            public void setSymbolTables(SymbolTableHandler symbolTables) {
031                    this.symbolTables = symbolTables;
032            }
033            
034            public void addLabel(Element element, String labelFunction, String label) throws MaltChainedException {
035                    element.addLabel(symbolTables.addSymbolTable(labelFunction), label);
036            }
037            
038            public LabelSet checkOutNewLabelSet() throws MaltChainedException {
039                    return labelSetPool.checkOut();
040            }
041            
042            public void checkInLabelSet(LabelSet labelSet) throws MaltChainedException {
043                    labelSetPool.checkIn(labelSet);
044            }
045            
046            public void clear() throws MaltChainedException {
047                    numberOfComponents = 0;
048                    labelSetPool.checkInAll();
049            }
050    }