diff options
-rw-r--r-- | mert/Data.cpp | 16 | ||||
-rw-r--r-- | mert/Data.h | 18 | ||||
-rw-r--r-- | mert/Optimizer.cpp | 4 | ||||
-rw-r--r-- | mert/Optimizer.h | 5 |
4 files changed, 19 insertions, 24 deletions
diff --git a/mert/Data.cpp b/mert/Data.cpp index 3e723f8be..a4e6c2b24 100644 --- a/mert/Data.cpp +++ b/mert/Data.cpp @@ -21,8 +21,8 @@ Data::Data() : theScorer(NULL), number_of_scores(0), _sparse_flag(false), - scoredata(NULL), - featdata(NULL) {} + scoredata(), + featdata() {} Data::Data(Scorer& ptr) : theScorer(&ptr), @@ -36,17 +36,6 @@ Data::Data(Scorer& ptr) TRACE_ERR("Data::Scorer type from Scorer: " << theScorer->getName() << endl); } -Data::~Data() { - if (featdata) { - delete featdata; - featdata = NULL; - } - if (scoredata) { - delete scoredata; - scoredata = NULL; - } -} - //ADDED BY TS void Data::remove_duplicates() { @@ -128,7 +117,6 @@ void Data::remove_duplicates() { // } } - std::cerr << "removed " << nRemoved << "/" << feat_array.size() << std::endl; if (nRemoved > 0) { diff --git a/mert/Data.h b/mert/Data.h index 56d7ac47d..171c6db41 100644 --- a/mert/Data.h +++ b/mert/Data.h @@ -15,12 +15,17 @@ using namespace std; #include <vector> #include <iostream> +#include<boost/shared_ptr.hpp> + #include "Util.h" #include "FeatureData.h" #include "ScoreData.h" class Scorer; +typedef boost::shared_ptr<ScoreData> ScoreDataHandle; +typedef boost::shared_ptr<FeatureData> FeatureDataHandle; + class Data { private: @@ -30,25 +35,26 @@ private: bool _sparse_flag; protected: - // TODO: Use smart pointers for exceptional-safety. - ScoreData* scoredata; - FeatureData* featdata; + ScoreDataHandle scoredata; + FeatureDataHandle featdata; public: explicit Data(Scorer& sc); Data(); - ~Data(); + + //Note that there is no copy constructor implemented, so only the + //compiler synthesised shallow copy is available inline void clear() { scoredata->clear(); featdata->clear(); } - ScoreData* getScoreData() { + ScoreDataHandle getScoreData() { return scoredata; } - FeatureData* getFeatureData() { + FeatureDataHandle getFeatureData() { return featdata; } diff --git a/mert/Optimizer.cpp b/mert/Optimizer.cpp index d848685e6..093c9ac1b 100644 --- a/mert/Optimizer.cpp +++ b/mert/Optimizer.cpp @@ -38,13 +38,13 @@ void Optimizer::SetScorer(Scorer *_scorer) scorer = _scorer; } -void Optimizer::SetFData(FeatureData *_FData) +void Optimizer::SetFData(FeatureDataHandle _FData) { FData = _FData; } Optimizer::Optimizer(unsigned Pd, vector<unsigned> i2O, vector<parameter_t> start, unsigned int nrandom) - : scorer(NULL), FData(NULL), number_of_random_directions(nrandom) + : scorer(NULL), FData(), number_of_random_directions(nrandom) { // Warning: the init vector is a full set of parameters, of dimension pdim! Point::pdim = Pd; diff --git a/mert/Optimizer.h b/mert/Optimizer.h index 7cc785337..69c7a7641 100644 --- a/mert/Optimizer.h +++ b/mert/Optimizer.h @@ -3,6 +3,7 @@ #include <vector> #include <string> +#include "Data.h" #include "FeatureData.h" #include "Scorer.h" #include "Types.h" @@ -20,13 +21,13 @@ class Optimizer { protected: Scorer *scorer; // no accessor for them only child can use them - FeatureData *FData; // no accessor for them only child can use them + FeatureDataHandle FData; // no accessor for them only child can use them unsigned int number_of_random_directions; public: Optimizer(unsigned Pd, vector<unsigned> i2O, vector<parameter_t> start, unsigned int nrandom); void SetScorer(Scorer *_scorer); - void SetFData(FeatureData *_FData); + void SetFData(FeatureDataHandle _FData); virtual ~Optimizer(); unsigned size() const { |