// Copyright 2015 Thomas Müller // This file is part of MarMoT, which is licensed under GPLv3. package chipmunk.segmenter; import java.io.Serializable; import java.util.List; import marmot.core.Feature; import marmot.util.DynamicWeights; import marmot.util.Encoder; import marmot.util.SymbolTable; public abstract class IndexConsumer implements Serializable { private static final long serialVersionUID = 1L; private SymbolTable<Feature> feature_map_; protected DynamicWeights weights_; private boolean insert_; private int num_tags_bits_; private Encoder.State state_; public abstract void consume(int index); public IndexConsumer(DynamicWeights weights, SymbolTable<Feature> feature_map, boolean insert, int num_tag_bits) { setWeights(weights); feature_map_ = feature_map; insert_ = insert; num_tags_bits_ = num_tag_bits; state_ = new Encoder.State(); } public void consume(Encoder encoder, List<Integer> tags) { encoder.storeState(state_); for (int tag : tags) { encoder.append(tag, num_tags_bits_); int index = feature_map_.toIndex(encoder.getFeature(), -1, getInsert()); consume(index); encoder.restoreState(state_); } } public void setWeights(DynamicWeights weights) { weights_ = weights; } public DynamicWeights getWeights() { return weights_; } public SymbolTable<Feature> getFeatureTable() { return feature_map_; } protected boolean getInsert() { return insert_; } public void setInsert(boolean insert) { insert_ = insert; } }