Commit 0cdcfac0 authored by Florent Jacquemard's avatar Florent Jacquemard
Browse files

RunTerm (class of terminal=leaf runs) is no longer a template

parent 0453dd96
......@@ -503,6 +503,7 @@
4377138F231FBEE40089153C /* PointedRT.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 432F19E3204EE5D8002CD439 /* PointedRT.cpp */; };
43771390231FBF040089153C /* Label.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 43979C6222A11762008BA390 /* Label.cpp */; };
437784B923881168007741A2 /* DuraList.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 43C7232F2362E2D800D5E20E /* DuraList.cpp */; };
437E8FFA2613382500B3150B /* RunTerm.tpp in Sources */ = {isa = PBXBuildFile; fileRef = 430046E42604CF3F000E9898 /* RunTerm.tpp */; };
437EDA5C20EE419B008F0755 /* Rest.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 437EDA5A20EE419B008F0755 /* Rest.cpp */; };
437FA6F922F97709003974DC /* ParsingEnv.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 437FA6F722F97709003974DC /* ParsingEnv.cpp */; };
437FC6C120BFFAC900AF0A2D /* InputSegmentMono.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 437FC6BF20BFFAC900AF0A2D /* InputSegmentMono.cpp */; };
......@@ -3339,6 +3340,7 @@
43F62EEA25DEC2F2006824CA /* AEVisitor.cpp in Sources */,
43E76050237475B4004426E6 /* SpanningElement.cpp in Sources */,
4321C81325A4ED4000486DAD /* CMND.cpp in Sources */,
437E8FFA2613382500B3150B /* RunTerm.tpp in Sources */,
43B4A9D4258418EB00FDD201 /* StaffDef.cpp in Sources */,
43D7B19C259A46C500D62892 /* Staffed.cpp in Sources */,
4331FC6A259B320500895F0F /* StaffRange.cpp in Sources */,
......
......@@ -102,14 +102,14 @@ bool KeyS::complete() const
void KeyS::runs(std::stack<RunInner<KeyS>*>& si,
std::stack<std::pair<const KeyS*, RunTerm<KeyS>*>>& st,
std::stack<std::pair<const KeyS*, RunTerm*>>& st,
ParsingEnv& env) const
{
RunFactory<KeyS>::runs(*this, si, st, env);
}
RunTerm<KeyS>* KeyS::failRun(const ParsingEnv& env) const
RunTerm* KeyS::failRun(const ParsingEnv& env) const
{
return RunFactory<KeyS>::failRun(*this, env);
}
......@@ -117,10 +117,10 @@ RunTerm<KeyS>* KeyS::failRun(const ParsingEnv& env) const
// protected
void KeyS::RunsTerminal(const Transition& t,
std::stack<std::pair<const KeyS*, RunTerm<KeyS>*>>& st,
std::stack<std::pair<const KeyS*, RunTerm*>>& st,
const ParsingEnv& env) const
{
RunTerm<KeyS>* r = new RunTerm<KeyS>(t, 0); // length = 0
RunTerm* r = new RunTerm(t, 0); // length = 0
TRACE("NEW terminal run {} -> {} for {}", *r, *this, t);
st.push(std::make_pair((KeyS*) NULL, r)); // this key is complete
}
......@@ -139,7 +139,7 @@ void KeyS::RunsInner(const Transition& t,
//void KeyS::runsWTA(std::stack<RunInner<KeyS>*>& si,
// std::stack<std::pair<KeyS, RunTerm<KeyS>*>>& st,
// std::stack<std::pair<KeyS, RunTerm*>>& st,
// const ParsingEnv& env) const
//{
// assert(State::isWTA(_state)); // no treament of bars for this class of key
......@@ -148,7 +148,7 @@ void KeyS::RunsInner(const Transition& t,
//void KeyS::runsBar(std::stack<RunInner<KeyS>*>& si,
// std::stack<std::pair<KeyS, RunTerm<KeyS>*>>& st,
// std::stack<std::pair<KeyS, RunTerm*>>& st,
// ParsingEnv& env) const
//{
// RunFactory<KeyS>::runsBar(*this, si, st, env);
......
......@@ -114,7 +114,7 @@ public:
/// @param r a complete terminal run targeting the key constructed.
/// @param env input environment.
/// Construct a complete instance of k that will be the target of run r.
KeyS(const KeyS& k, const RunTerm<KeyS>& r, const ParsingEnv& env);
KeyS(const KeyS& k, const RunTerm& r, const ParsingEnv& env);
/// @brief copy
KeyS(const KeyS& k);
......@@ -156,7 +156,7 @@ public:
/// - a complete terminal run targeting r'
/// All the runs in stacks must be deallocate elsewhere.
virtual void runs(std::stack<RunInner<KeyS>*>& si,
std::stack<std::pair<const KeyS*, RunTerm<KeyS>*>>& st,
std::stack<std::pair<const KeyS*, RunTerm*>>& st,
ParsingEnv& env) const;
/// allocate and return a special Run representing a parse failure for this key.
......@@ -167,7 +167,7 @@ public:
/// - fail symbol
/// - weight zero (in the domain of the base wta).
/// This returned run will answer succesfully to Run.fail().
RunTerm<KeyS>* failRun(const ParsingEnv& env) const;
RunTerm* failRun(const ParsingEnv& env) const;
friend std::ostream& operator<<(std::ostream& o, const KeyS& k);
......@@ -185,14 +185,14 @@ protected:
// @param st a stack to be filled with pairs containing terminal runs.
// @param env parsing environment, containing a wta.
// virtual void runsWTA(std::stack<RunInner<KeyS>*>& si,
// std::stack<std::pair<KeyS, RunTerm<KeyS>*>>& st,
// std::stack<std::pair<KeyS, RunTerm*>>& st,
// const ParsingEnv& env) const;
// construct and add to the stacks (augmented) runs targeting
// complete instances of this key.
// void runsBar(std::stack<RunInner<KeyS>*>& si,
// std::stack<std::pair<KeyS, RunTerm<KeyS>*>>& st,
// std::stack<std::pair<KeyS, RunTerm*>>& st,
// ParsingEnv& env) const;
......@@ -201,7 +201,7 @@ protected:
/// @param st a stack to be filled with pairs containing terminal runs.
/// @param env parsing environment, containing a wta and pool.
virtual void RunsTerminal(const Transition& t,
std::stack<std::pair<const KeyS*, RunTerm<KeyS>*>>& st,
std::stack<std::pair<const KeyS*, RunTerm*>>& st,
const ParsingEnv& env) const;
/// add to the given stack some inner runs built from the given transition.
......
......@@ -263,7 +263,7 @@ size_t KeySI::size() const
void KeySI::runs(std::stack<RunInner<KeySI>*>& si,
std::stack<std::pair<const KeySI*, RunTerm<KeySI>*>>& st,
std::stack<std::pair<const KeySI*, RunTerm*>>& st,
ParsingEnv& env) const
{
RunFactory<KeySI>::runs(*this, si, st, env);
......@@ -271,7 +271,7 @@ void KeySI::runs(std::stack<RunInner<KeySI>*>& si,
//void KeySI::runsWTA(std::stack<RunInner<KeySI>*>& si,
// std::stack<std::pair<KeySI, RunTerm<KeySI>*>>& st,
// std::stack<std::pair<KeySI, RunTerm*>>& st,
// ParsingEnv& env) const
//{
// RunFactory<KeySI>::runsWTA(*this, si, st, env);
......@@ -279,7 +279,7 @@ void KeySI::runs(std::stack<RunInner<KeySI>*>& si,
//void KeySI::runsBar(std::stack<RunInner<KeySI>*>& si,
// std::stack<std::pair<KeySI, RunTerm<KeySI>*>>& st,
// std::stack<std::pair<KeySI, RunTerm*>>& st,
// ParsingEnv& env) const
//{
// RunFactory<KeySI>::runsBar(*this, si, st, env);
......@@ -288,7 +288,7 @@ void KeySI::runs(std::stack<RunInner<KeySI>*>& si,
// not the default of RunFactory (consider interval)
void KeySI::RunsTerminal(const Transition& t,
std::stack<std::pair<const KeySI*, RunTerm<KeySI>*>>& st,
std::stack<std::pair<const KeySI*, RunTerm*>>& st,
const ParsingEnv& env) const
{
const label_t& a = t.label();
......@@ -401,7 +401,7 @@ void KeySI::RunsInner(const Transition& t,
// not the default of RunFactory
RunTerm<KeySI>* KeySI::failRun(const ParsingEnv& env) const
RunTerm* KeySI::failRun(const ParsingEnv& env) const
{
assert(env.wta);
const Transition& t0 = env.dummyTransition_zero();
......@@ -414,7 +414,7 @@ RunTerm<KeySI>* KeySI::failRun(const ParsingEnv& env) const
label_t a = SymbLabel::make_fail(this->size());
assert(_interval);
size_t length = _interval->size();
return new RunTerm<KeySI>(t0, a, t0.weight(), length);
return new RunTerm(t0, a, t0.weight(), length);
}
......@@ -503,7 +503,7 @@ std::ostream& operator<<(std::ostream& o, const KeySI& p)
//void KeySI::runsBar(std::stack<RunInner<KeySI>*>& si,
// std::stack<std::pair<KeySI, RunTerm<KeySI>*>>& st,
// std::stack<std::pair<KeySI, RunTerm*>>& st,
// ParsingEnv& env) const
//{
// assert(State::isMeta(_state));
......
......@@ -64,7 +64,7 @@ public:
/// @param r a complete terminal run targeting the key constructed.
/// @param env input environment.
/// Construct a complete instance of k that will be the target of run r.
KeySI(const KeySI& k, const RunTerm<KeySI>& r, const ParsingEnv& env);
KeySI(const KeySI& k, const RunTerm& r, const ParsingEnv& env);
/// @brief copy
KeySI(const KeySI& k);
......@@ -103,7 +103,7 @@ public:
/// - a complete terminal run targeting r'
/// All the runs in stacks must be deallocate elsewhere.
void runs(std::stack<RunInner<KeySI>*>& si,
std::stack<std::pair<const KeySI*, RunTerm<KeySI>*>>& st,
std::stack<std::pair<const KeySI*, RunTerm*>>& st,
ParsingEnv& env) const;
/// allocate and return a special Run representing a parse failure for this key.
......@@ -114,7 +114,7 @@ public:
/// - fail symbol
/// - weight one (in the domain of the base wta).
/// This returned run will answer succesfully to Run.fail().
RunTerm<KeySI>* failRun(const ParsingEnv& env) const;
RunTerm* failRun(const ParsingEnv& env) const;
/// @brief printer
friend std::ostream& operator<<(std::ostream& o, const KeySI& p);
......@@ -142,7 +142,7 @@ protected:
/// @param t transition to build terminal runs. must be terminal and complete.
/// @param st a stack to be filled with pairs containing terminal runs.
virtual void RunsTerminal(const Transition& t,
std::stack<std::pair<const KeySI*, RunTerm<KeySI>*>>& st,
std::stack<std::pair<const KeySI*, RunTerm*>>& st,
const ParsingEnv& env) const;
/// add to the given stack some inner runs built from the given transition.
......@@ -165,13 +165,13 @@ protected:
// @param st a stack to be filled with pairs containing terminal runs.
// @param env parsing environment, containing a wta.
// virtual void runsWTA(std::stack<RunInner<KeySI>*>& si,
// std::stack<std::pair<KeySI*, RunTerm<KeySI>*>>& st,
// std::stack<std::pair<KeySI*, RunTerm*>>& st,
// ParsingEnv& env) const;
// construct and add to the stacks (augmented) runs targeting
// complete instances of this key.
// void runsBar(std::stack<RunInner<KeySI>*>& si,
// std::stack<std::pair<KeySI, RunTerm<KeySI>*>>& st,
// std::stack<std::pair<KeySI, RunTerm*>>& st,
// ParsingEnv& env) const;
private:
......@@ -207,11 +207,11 @@ private:
const ParsingEnv& env);
// virtual void runsWTA(std::stack<RunInner<KeySI>*>& si,
// std::stack<std::pair<KeySI, RunTerm<KeySI>*>>& st,
// std::stack<std::pair<KeySI, RunTerm*>>& st,
// ParsingEnv& env) const;
// virtual void runsBar(std::stack<RunInner<KeySI>*>& si,
// std::stack<std::pair<KeySI, RunTerm<KeySI>*>>& st,
// std::stack<std::pair<KeySI, RunTerm*>>& st,
// ParsingEnv& env) const;
};
......
......@@ -32,7 +32,7 @@ public:
/// @param failrun fixed run returned by best when there is no best run.
/// @warning the key associated to the record must
/// be set later to a non-NULL ptr with setKey.
RecordOne(RunCompare comp, const RunTerm<K>* failrun);
RecordOne(RunCompare comp, const RunTerm* failrun);
/// deleting a RecordOne frees the best run contained.
virtual ~RecordOne();
......
......@@ -10,7 +10,7 @@
namespace Parsing{
template<class K>
RecordOne<K>::RecordOne(RunCompare comp, const RunTerm<K>* failrun):
RecordOne<K>::RecordOne(RunCompare comp, const RunTerm* failrun):
Record<K>(comp, failrun), // base class constructor with parameter
_best(nullptr) // initialize with worst run
{ }
......
......@@ -30,7 +30,7 @@ public:
/// @param failrun fixed run returned by best when there is no best run.
/// @warning the key associated to the record must
/// be set later to a non NULL ptr with initKey.
RecordQueue(RunCompare comp, const RunTerm<K>* failrun);
RecordQueue(RunCompare comp, const RunTerm* failrun);
/// deleting a RecordQueue frees all runs contained
/// in the candidate queue and the best list.
......
......@@ -11,7 +11,7 @@ namespace Parsing{
template<class K>
RecordQueue<K>::RecordQueue(RunCompare comp, const RunTerm<K>* failrun):
RecordQueue<K>::RecordQueue(RunCompare comp, const RunTerm* failrun):
Record<K>(comp, failrun), // base class constructor with parameter
_cand(comp), // empty candidate list
_best() // empty best list
......
......@@ -54,7 +54,7 @@ public:
/// @todo delete failrun if not necessary (replaced by method)
/// @warning the key associated to the record must
/// be set later to a non-NULL ptr with setKey.
Record(RunCompare comp, const RunTerm<K>* failrun);
Record(RunCompare comp, const RunTerm* failrun);
virtual ~Record();
......@@ -82,7 +82,7 @@ public:
/// @brief set the fail Run associated to the record.
/// @param r the fail run to be set.
/// @warning the current fail Run of this record must be NULL.
void setFailRun(const RunTerm<K>* r);
void setFailRun(const RunTerm* r);
/// at least one run has been added succesfully.
virtual bool empty() const = 0;
......@@ -111,7 +111,7 @@ protected:
/// generic fail run associated to the key.
/// will be returned in case of parse failure.
/// @todo delete if not necessary
const RunTerm<K>* _fail;
const RunTerm* _fail;
/// @todo shared_ptr
// std::shared_ptr<Run> _fail;
......
......@@ -14,7 +14,7 @@ namespace Parsing{
template<class K>
Record<K>::Record(RunCompare comp, const RunTerm<K>* failrun):
Record<K>::Record(RunCompare comp, const RunTerm* failrun):
_key(nullptr),
_comp(comp),
_fail(failrun),
......@@ -49,7 +49,7 @@ void Record<K>::setKey(const K* k)
template<class K>
void Record<K>::setFailRun(const RunTerm<K>* r)
void Record<K>::setFailRun(const RunTerm* r)
{
assert(r);
assert(_fail == nullptr); // set only once
......
//
// RunCompare.cpp
// squant2
//
// Created by Florent Jacquemard on 30/03/2021.
// Copyright © 2021 Florent Jacquemard. All rights reserved.
//
#include "RunCompare.hpp"
namespace Parsing{
RunCompare weightMax =
[](const Run* lhs, const Run* rhs)
{
assert (lhs);
assert (rhs);
assert (lhs->complete());
assert (rhs->complete());
return (lhs->weight() < rhs->weight());
// if (rhs->partial() || rhs->weight().unknown())
// return false;
// else if (lhs->partial() || lhs->weight().unknown())
// return true;
// else
// return (lhs->weight() > rhs->weight());
};
RunCompare weightMin =
[](const Run* lhs, const Run* rhs)
{
assert (lhs);
assert (rhs);
assert (lhs->complete());
assert (rhs->complete());
return (lhs->weight() > rhs->weight());
// if (lhs->partial() || lhs->weight().unknown())
// return false;
// // if rhs == 0 then lhs == rhs
// // if rhs > 0 then lhs > rhs;
// else if (rhs->partial() || rhs->weight().unknown())
// return true;
// else
// return (lhs->weight() < rhs->weight());
};
} // end namespace Parsing
......@@ -67,7 +67,7 @@ public:
/// All the runs in stacks must be deallocate elsewhere.
static void runs(const K& k,
std::stack<RunInner<K>*>& si,
std::stack<std::pair<const K*, RunTerm<K>*>>& st,
std::stack<std::pair<const K*, RunTerm*>>& st,
ParsingEnv& env);
/// add to the stacks runs corresponding to the extension
......@@ -77,14 +77,14 @@ public:
/// @param env parsing environment, containing a wta.
static void runsWTA(const K& k,
std::stack<RunInner<K>*>& si,
std::stack<std::pair<const K*, RunTerm<K>*>>& st,
std::stack<std::pair<const K*, RunTerm*>>& st,
const ParsingEnv& env);
/// construct base "over-the-bar transitions" (nullary and binary),
/// extend them and add them to the stacks.
static void runsBar(const K& k,
std::stack<RunInner<K>*>& si,
std::stack<std::pair<const K*, RunTerm<K>*>>& st,
std::stack<std::pair<const K*, RunTerm*>>& st,
ParsingEnv& env);
/// generic method adding to the given stack one innterminal run
......@@ -102,7 +102,7 @@ public:
label_t lab,
const Weight& w,
size_t len,
std::stack<std::pair<const K*, RunTerm<K>*>>& st);
std::stack<std::pair<const K*, RunTerm*>>& st);
/// generic method adding to the given stack one inner runs built from the
/// given transition.
......@@ -132,7 +132,7 @@ public:
/// - fail symbol
/// - weight zero (in the domain of the base wta).
/// This returned run will answer succesfully to Run.fail().
static RunTerm<K>* failRun(const K& k,
static RunTerm* failRun(const K& k,
const ParsingEnv& env);
private:
......
......@@ -18,7 +18,7 @@ namespace Parsing{
template<class K>
void RunFactory<K>::runs(const K& k,
std::stack<RunInner<K>*>& si,
std::stack<std::pair<const K*, RunTerm<K>*>>& st,
std::stack<std::pair<const K*, RunTerm*>>& st,
ParsingEnv& env)
{
assert(si.empty());
......@@ -38,7 +38,7 @@ void RunFactory<K>::runs(const K& k,
template<class K>
void RunFactory<K>::runsWTA(const K& k,
std::stack<RunInner<K>*>& si,
std::stack<std::pair<const K*, RunTerm<K>*>>& st,
std::stack<std::pair<const K*, RunTerm*>>& st,
const ParsingEnv& env)
{
assert(State::isWTA(k.state()));
......@@ -73,7 +73,7 @@ void RunFactory<K>::runsWTA(const K& k,
template<class K>
void RunFactory<K>::runsBar(const K& k,
std::stack<RunInner<K>*>& si,
std::stack<std::pair<const K*, RunTerm<K>*>>& st,
std::stack<std::pair<const K*, RunTerm*>>& st,
ParsingEnv& env)
{
assert(k.complete());
......@@ -82,7 +82,7 @@ void RunFactory<K>::runsBar(const K& k,
const Transition& t0 = barTransition0(k.state(), env);
// let the key class extend this transition and add extension to stack
k.RunsTerminal(t0, st, env);
// RunTerm<K>* r0 = new RunTerm<K>(t0, 0); // empty interval
// RunTerm* r0 = new RunTerm(t0, 0); // empty interval
// st.push(std::make_pair((K*) NULL, r0)); // only for complete keys
// create bar binary transition. it is added to the env pool.
......@@ -100,7 +100,7 @@ void RunFactory<K>::terminalRun(const K& k,
label_t a,
const Weight& w,
size_t len,
std::stack<std::pair<const K*, RunTerm<K>*>>& st)
std::stack<std::pair<const K*, RunTerm*>>& st)
{
assert(k.complete()); // ONLY FOR COMPLETE KEY !
assert(t.arity() == SymbLabel::arity(a));
......@@ -110,7 +110,7 @@ void RunFactory<K>::terminalRun(const K& k,
WARN("RunFactory: weight zero for term. transition {}, skip", t);
return;
}
RunTerm<K>* r = new RunTerm<K>(t, a, w, len);
RunTerm* r = new RunTerm(t, a, w, len);
TRACE("NEW terminal run {} -> {} for {}", *r, k, t);
st.push(std::make_pair(&k, r)); // this key is complete
}
......@@ -204,7 +204,7 @@ const Transition& RunFactory<K>::barTransition2(state_t state, ParsingEnv& env)
template<class K>
RunTerm<K>* RunFactory<K>::failRun(const K& k,
RunTerm* RunFactory<K>::failRun(const K& k,
const ParsingEnv& env)
{
assert(env.wta);
......@@ -212,7 +212,7 @@ RunTerm<K>* RunFactory<K>::failRun(const K& k,
assert(t0.weight().zero());
size_t length = 0; // number of input symbols parsed
label_t a = SymbLabel::make_fail(length);
return new RunTerm<K>(t0, a, t0.weight(), length);
return new RunTerm(t0, a, t0.weight(), length);
}
......
......@@ -28,8 +28,6 @@ namespace Parsing{
/// An terminal run is complete when marked as such (flag).
/// It is partial otherwise.
/// The weight of a partial terminal run can be changed.
/// param K = class of Key in parse table
template<class K>
class RunTerm : public Run
{
public:
......@@ -52,15 +50,15 @@ public:
RunTerm(const Transition& tr, label_t lab, const Weight& w, size_t len);
/// copy construtor.
RunTerm(const RunTerm<K>& r);
RunTerm(const RunTerm& r);
/// deleting a run does not free the records
/// pointed in the list of children (this list contains only pointers).
virtual ~RunTerm();
RunTerm<K>& operator= (const RunTerm<K>& rhs);
RunTerm& operator= (const RunTerm& rhs);
bool operator==(const RunTerm<K>& rhs) const;
bool operator==(const RunTerm& rhs) const;
/// number of input symbols (events) parsed by this terminal run.
size_t length() const;
......@@ -75,7 +73,7 @@ public:
/// a terminal run is complete
virtual bool complete() const;
friend std::ostream& operator<<(std::ostream& o, const RunTerm<K>& r)
friend std::ostream& operator<<(std::ostream& o, const RunTerm& r)
{
SymbLabel::print(r._label, o);
o << " : " << r._weight;
......@@ -99,7 +97,7 @@ protected:
// separated definition of template class
#include "RunTerm.tpp"
//#include "RunTerm.tpp"
#endif /* RunTerm_hpp */
......
......@@ -6,11 +6,14 @@
// Copyright © 2021 Florent Jacquemard. All rights reserved.
//
#include "RunTerm.hpp"
namespace Parsing{
template<class K>
RunTerm<K>::RunTerm(const Transition& tr, size_t len):
//template<class K>
RunTerm::RunTerm(const Transition& tr, size_t len):
Run(tr),
_complete(true),
_length(len)
......@@ -22,8 +25,8 @@ _length(len)
}
template<class K>
RunTerm<K>::RunTerm(const Transition& tr,
//template<class K>
RunTerm::RunTerm(const Transition& tr,
label_t a,
const Weight& w,
size_t len):
......@@ -39,23 +42,23 @@ _length(len)
// copy
template<class K>
RunTerm<K>::RunTerm(const RunTerm<K>& r):
//template<class K>
RunTerm::RunTerm(const RunTerm& r):
Run(r),
_complete(r._complete),
_length(r._length)
{ }
template<class K>
RunTerm<K>::~RunTerm()
//template<class K>
RunTerm::~RunTerm()
{
TRACE("delete terminal Run {}", *this);
}
template<class K>
RunTerm<K>& RunTerm<K>::operator= (const RunTerm<K>& rhs)
//template<class K>
RunTerm& RunTerm::operator= (const RunTerm& rhs)
{
if(this != &rhs)
{
......@@ -68,8 +71,8 @@ RunTerm<K>& RunTerm<K>::operator= (const RunTerm<K>& rhs)
}
template<class K>
bool RunTerm<K>::operator==(const RunTerm<K>& rhs) const
//template<class K>
bool RunTerm::operator==(const RunTerm& rhs) const
{
if (! Run::operator==(rhs))
return false;
......@@ -84,38 +87,38 @@ bool RunTerm<K>::operator==(const RunTerm<K>& rhs) const
}
template<class K>
size_t RunTerm<K>::length() const
//template<class K>
size_t RunTerm::length() const
{
return _length;
// return SymbLabel::nbEvents(_label);
}