001 package calhoun.analysis.crf.io;
002
003 import java.io.BufferedReader;
004 import java.io.IOException;
005 import java.io.Writer;
006 import java.util.Map;
007
008 import calhoun.util.Assert;
009
010 /** reads in an input consisting of a string of 1's and 0's that correspond to binary values. Can be used as a standalone
011 * input component or part of an interleaved input.
012 */
013 public class BooleanInput extends InterleavedInputComponentBase {
014 private static final long serialVersionUID = 4922000330136279956L;
015
016 public boolean read(BufferedReader r, Map<String, InputSequence<?>> output) throws IOException {
017 String str = r.readLine();
018 if(str == null) {
019 return false;
020 }
021 boolean[] data = new boolean[str.length()];
022 for (int i = 0; i < str.length(); ++i) {
023 char c = str.charAt(i);
024 if(c == '1')
025 data[i] = true;
026 else {
027 Assert.a(c=='0');
028 }
029 }
030 output.put(name, new InputSequenceBoolean(data));
031 return true;
032 }
033
034 public void write(Writer w, Map<String, ? extends InputSequence<?>> data) throws IOException {
035 boolean[] boolData = ((InputSequenceBoolean) data.get(name)).getData();
036 for(boolean i: boolData) {
037 w.write(i ? '1':'0');
038 }
039 w.write('\n');
040 }
041 }