Skip to content
Snippets Groups Projects
Config.hpp 4.47 KiB
Newer Older
  • Learn to ignore specific revisions
  • Franck Dary's avatar
    Franck Dary committed
    #ifndef CONFIG__H
    #define CONFIG__H
    
    
    Franck Dary's avatar
    Franck Dary committed
    #include <string>
    #include <vector>
    
    #include <boost/circular_buffer.hpp>
    
    Franck Dary's avatar
    Franck Dary committed
    #include "util.hpp"
    
    #include "Dict.hpp"
    
    Franck Dary's avatar
    Franck Dary committed
    
    class Config
    {
    
    Franck Dary's avatar
    Franck Dary committed
    
      static constexpr const char * EOSColName = "EOS";
      static constexpr const char * EOSSymbol1 = "1";
      static constexpr const char * EOSSymbol0 = "0";
    
      static constexpr const char * headColName = "HEAD";
    
      static constexpr const char * deprelColName = "DEPREL";
    
      static constexpr const char * idColName = "ID";
    
      static constexpr int nbHypothesesMax = 1;
    
    
    Franck Dary's avatar
    Franck Dary committed
    
    
    Franck Dary's avatar
    Franck Dary committed
      using String = boost::flyweight<std::string>;
    
    Franck Dary's avatar
    Franck Dary committed
      using Utf8String = util::utf8string;
    
      using ValueIterator = std::vector<String>::iterator;
      using ConstValueIterator = std::vector<String>::const_iterator;
    
    Franck Dary's avatar
    Franck Dary committed
    
    
    Franck Dary's avatar
    Franck Dary committed
      std::vector<String> lines;
    
      std::set<std::string> predicted;
    
      int lastPoppedStack{-1};
    
    Franck Dary's avatar
    Franck Dary committed
      protected :
    
      const Utf8String & rawInput;
    
      std::size_t wordIndex{0};
      std::size_t characterIndex{0};
      String state{"NONE"};
      boost::circular_buffer<String> history{10};
    
    Franck Dary's avatar
    Franck Dary committed
      boost::circular_buffer<std::size_t> stack{50};
    
    Franck Dary's avatar
    Franck Dary committed
    
    
      Config(const Utf8String & rawInput);
    
      public :
    
    
      virtual std::size_t getNbColumns() const = 0;
      virtual std::size_t getColIndex(const std::string & colName) const = 0;
    
      virtual bool hasColIndex(const std::string & colName) const = 0;
    
      virtual std::size_t getFirstLineIndex() const = 0;
      virtual const std::string & getColName(int colIndex) const = 0;
    
    Franck Dary's avatar
    Franck Dary committed
    
    
      std::size_t getIndexOfLine(int lineIndex) const;
      std::size_t getIndexOfCol(int colIndex) const;
      std::size_t getNbLines() const;
      void addLines(unsigned int nbLines);
      void resizeLines(unsigned int nbLines);
    
      bool has(int colIndex, int lineIndex, int hypothesisIndex) const;
    
      String & get(int colIndex, int lineIndex, int hypothesisIndex);
    
    Franck Dary's avatar
    Franck Dary committed
      const String & getConst(int colIndex, int lineIndex, int hypothesisIndex) const;
    
      String & getLastNotEmpty(int colIndex, int lineIndex);
    
      String & getLastNotEmptyHyp(int colIndex, int lineIndex);
      const String & getLastNotEmptyHypConst(int colIndex, int lineIndex) const;
    
    Franck Dary's avatar
    Franck Dary committed
      const String & getLastNotEmptyConst(int colIndex, int lineIndex) const;
    
      const String & getAsFeature(int colIndex, int lineIndex) const;
    
      ValueIterator getIterator(int colIndex, int lineIndex, int hypothesisIndex);
      ConstValueIterator getConstIterator(int colIndex, int lineIndex, int hypothesisIndex) const;
    
    Franck Dary's avatar
    Franck Dary committed
    
    
    Franck Dary's avatar
    Franck Dary committed
      public :
    
    
    Franck Dary's avatar
    Franck Dary committed
      void print(FILE * dest) const;
    
      void printForDebug(FILE * dest) const;
      bool has(const std::string & colName, int lineIndex, int hypothesisIndex) const;
    
      String & get(const std::string & colName, int lineIndex, int hypothesisIndex);
      const String & getConst(const std::string & colName, int lineIndex, int hypothesisIndex) const;
      String & getLastNotEmpty(const std::string & colName, int lineIndex);
      const String & getLastNotEmptyConst(const std::string & colName, int lineIndex) const;
    
      String & getLastNotEmptyHyp(const std::string & colName, int lineIndex);
      const String & getLastNotEmptyHypConst(const std::string & colName, int lineIndex) const;
    
      const String & getAsFeature(const std::string & colName, int lineIndex) const;
    
      String & getFirstEmpty(int colIndex, int lineIndex);
      String & getFirstEmpty(const std::string & colName, int lineIndex);
    
    Franck Dary's avatar
    Franck Dary committed
      bool hasCharacter(int letterIndex) const;
    
    Franck Dary's avatar
    Franck Dary committed
      util::utf8char getLetter(int letterIndex) const;
      void addToHistory(const std::string & transition);
    
    Franck Dary's avatar
    Franck Dary committed
      void addToStack(std::size_t index);
    
      void popStack();
    
    Franck Dary's avatar
    Franck Dary committed
      bool isComment(std::size_t lineIndex) const;
    
      bool isMultiword(std::size_t lineIndex) const;
    
      int getMultiwordSize(std::size_t lineIndex) const;
    
      bool isEmptyNode(std::size_t lineIndex) const;
      bool isToken(std::size_t lineIndex) const;
      bool moveWordIndex(int relativeMovement);
    
      bool canMoveWordIndex(int relativeMovement) const;
    
    Franck Dary's avatar
    Franck Dary committed
      bool moveCharacterIndex(int relativeMovement);
    
      bool canMoveCharacterIndex(int relativeMovement) const;
    
    Franck Dary's avatar
    Franck Dary committed
      bool rawInputOnlySeparatorsLeft() const;
      std::size_t getWordIndex() const;
      std::size_t getCharacterIndex() const;
      const String & getHistory(int relativeIndex) const;
    
      std::size_t getStack(int relativeIndex) const;
    
    Franck Dary's avatar
    Franck Dary committed
      bool hasHistory(int relativeIndex) const;
    
      bool hasStack(int relativeIndex) const;
    
    Franck Dary's avatar
    Franck Dary committed
      String getState() const;
      void setState(const std::string state);
    
    Franck Dary's avatar
    Franck Dary committed
      bool stateIsDone() const;
    
      void addPredicted(const std::set<std::string> & predicted);
      bool isPredicted(const std::string & colName) const;
    
      int getLastPoppedStack() const;
    
    Franck Dary's avatar
    Franck Dary committed
    };
    
    #endif