Refactoring: constructors and copying objects.

This commit is contained in:
Tetsuo Kiso 2011-11-12 18:12:07 +09:00
parent 87a5c16b55
commit 20e27aab92
4 changed files with 59 additions and 60 deletions

View File

@ -81,20 +81,30 @@ SparseVector operator-(const SparseVector& lhs, const SparseVector& rhs) {
return res;
}
FeatureStats::FeatureStats()
: available_(kAvailableSize), entries_(0),
array_(new FeatureStatsType[available_]) {}
FeatureStats::FeatureStats(const size_t size)
: available_(size), entries_(size),
array_(new FeatureStatsType[available_])
{
available_ = kAvailableSize;
entries_ = 0;
array_ = new FeatureStatsType[available_];
memset(array_, 0, GetArraySizeWithBytes());
}
FeatureStats::FeatureStats(std::string &theString)
: available_(0), entries_(0), array_(NULL)
{
set(theString);
}
FeatureStats::~FeatureStats()
{
delete [] array_;
if (array_)
delete [] array_;
}
FeatureStats::FeatureStats(const FeatureStats &stats)
void FeatureStats::Copy(const FeatureStats &stats)
{
available_ = stats.available();
entries_ = stats.size();
@ -103,17 +113,16 @@ FeatureStats::FeatureStats(const FeatureStats &stats)
map_ = stats.getSparse();
}
FeatureStats::FeatureStats(const size_t size)
FeatureStats::FeatureStats(const FeatureStats &stats)
{
available_ = size;
entries_ = size;
array_ = new FeatureStatsType[available_];
memset(array_, 0, GetArraySizeWithBytes());
Copy(stats);
}
FeatureStats::FeatureStats(std::string &theString)
FeatureStats& FeatureStats::operator=(const FeatureStats &stats)
{
set(theString);
delete [] array_;
Copy(stats);
return *this;
}
void FeatureStats::expand()
@ -199,18 +208,6 @@ void FeatureStats::savebin(std::ofstream& outFile)
outFile.write((char*) array_, GetArraySizeWithBytes());
}
FeatureStats& FeatureStats::operator=(const FeatureStats &stats)
{
delete [] array_;
available_ = stats.available();
entries_ = stats.size();
array_ = new FeatureStatsType[available_];
memcpy(array_,stats.getArray(), GetArraySizeWithBytes());
map_ = stats.getSparse();
return *this;
}
ostream& operator<<(ostream& o, const FeatureStats& e)
{
// print regular features

View File

@ -45,21 +45,23 @@ SparseVector operator-(const SparseVector& lhs, const SparseVector& rhs);
class FeatureStats
{
private:
size_t available_;
size_t entries_;
featstats_t array_;
SparseVector map_;
size_t entries_;
size_t available_;
public:
FeatureStats();
explicit FeatureStats(const size_t size);
explicit FeatureStats(std::string &theString);
~FeatureStats();
// We intentionally allow copying.
FeatureStats(const FeatureStats &stats);
FeatureStats& operator=(const FeatureStats &stats);
~FeatureStats();
void Copy(const FeatureStats &stats);
bool isfull() const {
return (entries_ < available_) ? 0 : 1;

View File

@ -9,22 +9,34 @@
#include <fstream>
#include "ScoreStats.h"
#define AVAILABLE_ 8;
namespace {
const int kAvailableSize = 8;
} // namespace
ScoreStats::ScoreStats()
: available_(kAvailableSize), entries_(0),
array_(new ScoreStatsType[available_]) {}
ScoreStats::ScoreStats(const size_t size)
: available_(size), entries_(size),
array_(new ScoreStatsType[available_])
{
available_ = AVAILABLE_;
entries_ = 0;
array_ = new ScoreStatsType[available_];
memset(array_, 0, GetArraySizeWithBytes());
}
ScoreStats::ScoreStats(std::string &theString)
: available_(0), entries_(0), array_(NULL)
{
set(theString);
}
ScoreStats::~ScoreStats()
{
delete [] array_;
if (array_)
delete [] array_;
}
ScoreStats::ScoreStats(const ScoreStats &stats)
void ScoreStats::Copy(const ScoreStats &stats)
{
available_ = stats.available();
entries_ = stats.size();
@ -32,26 +44,25 @@ ScoreStats::ScoreStats(const ScoreStats &stats)
memcpy(array_, stats.getArray(), GetArraySizeWithBytes());
}
ScoreStats::ScoreStats(const size_t size)
ScoreStats::ScoreStats(const ScoreStats &stats)
{
available_ = size;
entries_ = size;
array_ = new ScoreStatsType[available_];
memset(array_, 0, GetArraySizeWithBytes());
Copy(stats);
}
ScoreStats::ScoreStats(std::string &theString)
ScoreStats& ScoreStats::operator=(const ScoreStats &stats)
{
set(theString);
delete [] array_;
Copy(stats);
return *this;
}
void ScoreStats::expand()
{
available_ *= 2;
scorestats_t t_ = new ScoreStatsType[available_];
memcpy(t_, array_, GetArraySizeWithBytes());
scorestats_t buf = new ScoreStatsType[available_];
memcpy(buf, array_, GetArraySizeWithBytes());
delete [] array_;
array_ = t_;
array_ = buf;
}
void ScoreStats::add(ScoreStatsType v)
@ -113,22 +124,9 @@ void ScoreStats::savebin(std::ofstream& outFile)
outFile.write((char*)array_, GetArraySizeWithBytes());
}
ScoreStats& ScoreStats::operator=(const ScoreStats &stats)
{
delete [] array_;
available_ = stats.available();
entries_ = stats.size();
array_ = new ScoreStatsType[available_];
memcpy(array_, stats.getArray(), GetArraySizeWithBytes());
return *this;
}
ostream& operator<<(ostream& o, const ScoreStats& e)
{
for (size_t i=0; i< e.size(); i++)
o << e.get(i) << " ";
return o;
}

View File

@ -21,9 +21,9 @@ using namespace std;
class ScoreStats
{
private:
scorestats_t array_;
size_t entries_;
size_t available_;
size_t entries_;
scorestats_t array_;
public:
ScoreStats();
@ -35,6 +35,8 @@ public:
ScoreStats(const ScoreStats &stats);
ScoreStats& operator=(const ScoreStats &stats);
void Copy(const ScoreStats &stats);
bool isfull() const {
return (entries_ < available_) ? 0 : 1;
}