summaryrefslogtreecommitdiff
path: root/vest/scorer.h
diff options
context:
space:
mode:
Diffstat (limited to 'vest/scorer.h')
-rw-r--r--vest/scorer.h12
1 files changed, 12 insertions, 0 deletions
diff --git a/vest/scorer.h b/vest/scorer.h
index 0d90f378..0c8b380f 100644
--- a/vest/scorer.h
+++ b/vest/scorer.h
@@ -46,6 +46,18 @@ class Score : public boost::intrusive_refcount<Score> {
virtual void Encode(std::string* out) const = 0;
static ScoreP GetZero(ScoreType type);
static ScoreP GetOne(ScoreType type);
+ virtual ScoreP Clone() const = 0;
+protected:
+ Score() { } // we define these explicitly because refcount is noncopyable
+ Score(Score const& o) { }
+};
+
+//TODO: make sure default copy ctors for score types do what we want.
+template <class Derived>
+struct ScoreBase : public Score {
+ ScoreP Clone() const {
+ return ScoreP(new Derived(dynamic_cast<Derived const&>(*this)));
+ }
};
class SentenceScorer {