Ignore:
Timestamp:
Dec 21, 2016, 3:53:58 PM (3 years ago)
Author:
nmedfort
Message:

Bug fixes for Carry Manager and issues reported by Fahad

File:
1 edited

Legend:

Unmodified
Added
Removed
  • icGREP/icgrep-devel/icgrep/re/re_compiler.h

    r5227 r5233  
    1212#include <cc/cc_compiler.h>
    1313#include <pablo/builder.hpp>
     14#include <boost/container/flat_map.hpp>
    1415
    1516namespace UCD {
     
    3637    MarkerPosition pos;
    3738    pablo::PabloAST * stream;
     39    MarkerType & operator =(const MarkerType &) = default;
    3840};
    3941
    40 inline MarkerPosition markerPos(MarkerType m) {return m.pos;}
     42inline MarkerPosition markerPos(const MarkerType & m) {return m.pos; }
    4143
    42 inline pablo::PabloAST * markerVar(MarkerType m) {return m.stream;}
    43    
     44inline pablo::PabloAST * markerVar(const MarkerType & m) {return m.stream; }
     45
    4446inline MarkerType makeMarker(MarkerPosition newpos, pablo::PabloAST * strm) {return {newpos, strm};}
    4547
     
    5860private:
    5961
     62    struct NameMap {
     63        NameMap(NameMap * parent = nullptr) : mParent(parent), mMap() {}
     64        bool get(const Name * name, MarkerType & marker) const {
     65            auto f = mMap.find(name);
     66            if (f == mMap.end()) {
     67                return mParent ? mParent->get(name, marker) : false;
     68            } else {
     69                marker = f->second;
     70                return true;
     71            }
     72        }
     73        void add(const Name * const name, MarkerType marker) {
     74            mMap.emplace(name, std::move(marker));
     75        }
     76        NameMap * getParent() const { return mParent; }
     77    private:
     78        NameMap * const mParent;
     79        boost::container::flat_map<const Name *, MarkerType> mMap;
     80    };
     81
    6082    void initializeRequiredStreams_utf8();
    6183    void initializeRequiredStreams_utf16();
     
    6587    MarkerType compileName(Name * name, MarkerType marker, pablo::PabloBuilder & pb);
    6688    MarkerType compileSeq(Seq * seq, MarkerType marker, pablo::PabloBuilder & pb);
    67     MarkerType compileSeqTail(Seq::iterator current, Seq::iterator end, int matchLenSoFar, MarkerType marker, pablo::PabloBuilder & pb);
     89    MarkerType compileSeqTail(Seq::iterator current, const Seq::iterator end, int matchLenSoFar, MarkerType marker, pablo::PabloBuilder & pb);
    6890    MarkerType compileAlt(Alt * alt, MarkerType marker, pablo::PabloBuilder & pb);
    6991    MarkerType compileAssertion(Assertion * a, MarkerType marker, pablo::PabloBuilder & pb);
     
    102124    int                                             mStarDepth;
    103125    pablo::PabloBuilder &                           mPB;
    104     std::unordered_map<Name *, MarkerType>          mCompiledName;
    105 
     126    NameMap *                                       mCompiledName;
     127    NameMap                                         mBaseMap;
    106128};
    107129
Note: See TracChangeset for help on using the changeset viewer.