diff options
Diffstat (limited to 'decoder')
| -rw-r--r-- | decoder/tree_fragment.cc | 10 | ||||
| -rw-r--r-- | decoder/tree_fragment.h | 6 | 
2 files changed, 9 insertions, 7 deletions
| diff --git a/decoder/tree_fragment.cc b/decoder/tree_fragment.cc index 696c8601..aad0b2c4 100644 --- a/decoder/tree_fragment.cc +++ b/decoder/tree_fragment.cc @@ -8,7 +8,7 @@ using namespace std;  namespace cdec { -TreeFragment::TreeFragment(const string& tree, bool allow_frontier_sites) { +TreeFragment::TreeFragment(const StringPiece& tree, bool allow_frontier_sites) {    int bal = 0;    const unsigned len = tree.size();    unsigned cur = 0; @@ -50,7 +50,7 @@ void TreeFragment::DebugRec(unsigned cur, ostream* out) const {  // cp is the character index in the tree  // np keeps track of the nodes (nonterminals) that have been built  // symp keeps track of the terminal symbols that have been built -void TreeFragment::ParseRec(const string& tree, bool afs, unsigned cp, unsigned symp, unsigned np, unsigned* pcp, unsigned* psymp, unsigned* pnp) { +void TreeFragment::ParseRec(const StringPiece& tree, bool afs, unsigned cp, unsigned symp, unsigned np, unsigned* pcp, unsigned* psymp, unsigned* pnp) {    if (tree[cp] != '(') {      cerr << "Expected ( at " << cp << endl;      abort(); @@ -79,12 +79,12 @@ void TreeFragment::ParseRec(const string& tree, bool afs, unsigned cp, unsigned        // TODO: add a terminal symbol to the current edge        const bool is_terminal = tree[t_start] != '[' || (t_end - t_start < 3 || tree[t_end - 1] != ']');        if (is_terminal) { -        const unsigned term = TD::Convert(tree.substr(t_start, t_end - t_start)); +        const unsigned term = TD::Convert(tree.substr(t_start, t_end - t_start).as_string());          rhs.push_back(term);          // cerr << "T='" << TD::Convert(term) << "'\n";          ++terminals;        } else { // frontier site (NT but no recursion) -        const unsigned nt = TD::Convert(tree.substr(t_start + 1, t_end - t_start - 2)) | FRONTIER_BIT; +        const unsigned nt = TD::Convert(tree.substr(t_start + 1, t_end - t_start - 2).as_string()) | FRONTIER_BIT;          rhs.push_back(nt);          ++frontier_sites;          // cerr << "FRONT-NT=[" << TD::Convert(nt & ALL_MASK) << "]\n"; @@ -97,7 +97,7 @@ void TreeFragment::ParseRec(const string& tree, bool afs, unsigned cp, unsigned    } // continuent has completed, cp is at ), build node    const unsigned j = symp; // span from (i,j)    // add an internal non-terminal symbol -  const unsigned nt = TD::Convert(tree.substr(nt_start, nt_end - nt_start)) | RHS_BIT; +  const unsigned nt = TD::Convert(tree.substr(nt_start, nt_end - nt_start).as_string()) | RHS_BIT;    nodes[np] = TreeFragmentProduction(nt, rhs);    //cerr << np << " production(" << i << "," << j << ")=  " << TD::Convert(nt & ALL_MASK) << " -->";    //for (auto& x : rhs) { diff --git a/decoder/tree_fragment.h b/decoder/tree_fragment.h index 79722b5a..8bb7251a 100644 --- a/decoder/tree_fragment.h +++ b/decoder/tree_fragment.h @@ -8,6 +8,8 @@  #include <cassert>  #include <cstddef> +#include "string_piece.hh" +  namespace cdec {  class BreadthFirstIterator; @@ -52,7 +54,7 @@ class TreeFragment {   public:    TreeFragment() : frontier_sites(), terminals() {}    // (S (NP a (X b) c d) (VP (V foo) (NP (NN bar)))) -  explicit TreeFragment(const std::string& tree, bool allow_frontier_sites = false); +  explicit TreeFragment(const StringPiece& tree, bool allow_frontier_sites = false);    void DebugRec(unsigned cur, std::ostream* out) const;    typedef DepthFirstIterator iterator;    typedef ptrdiff_t difference_type; @@ -73,7 +75,7 @@ class TreeFragment {    // cp is the character index in the tree    // np keeps track of the nodes (nonterminals) that have been built    // symp keeps track of the terminal symbols that have been built -  void ParseRec(const std::string& tree, bool afs, unsigned cp, unsigned symp, unsigned np, unsigned* pcp, unsigned* psymp, unsigned* pnp); +  void ParseRec(const StringPiece& tree, bool afs, unsigned cp, unsigned symp, unsigned np, unsigned* pcp, unsigned* psymp, unsigned* pnp);   public:    unsigned root;    unsigned char frontier_sites; | 
