001package org.maltparser.core.syntaxgraph;
002
003import java.util.Observer;
004
005import org.maltparser.core.exception.MaltChainedException;
006import org.maltparser.core.pool.ObjectPoolList;
007import org.maltparser.core.symbol.SymbolTableHandler;
008/**
009*
010*
011* @author Johan Hall
012*/
013public abstract class SyntaxGraph implements LabeledStructure, Observer {
014        protected SymbolTableHandler symbolTables;
015        protected final ObjectPoolList<LabelSet> labelSetPool;
016        protected int numberOfComponents;
017        
018        public SyntaxGraph(SymbolTableHandler symbolTables) throws MaltChainedException  {
019                this.symbolTables = 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}