diff options
| author | Chris Dyer <redpony@gmail.com> | 2009-12-03 16:33:55 -0500 | 
|---|---|---|
| committer | Chris Dyer <redpony@gmail.com> | 2009-12-03 16:33:55 -0500 | 
| commit | 671c21451542e2dd20e45b4033d44d8e8735f87b (patch) | |
| tree | b1773b077dd65b826f067a423d26f7942ce4e043 /vest/error_surface.cc | |
initial check in
Diffstat (limited to 'vest/error_surface.cc')
| -rw-r--r-- | vest/error_surface.cc | 46 | 
1 files changed, 46 insertions, 0 deletions
| diff --git a/vest/error_surface.cc b/vest/error_surface.cc new file mode 100644 index 00000000..4e0af35c --- /dev/null +++ b/vest/error_surface.cc @@ -0,0 +1,46 @@ +#include "error_surface.h" + +#include <cassert> +#include <sstream> + +using namespace std; + +ErrorSurface::~ErrorSurface() { +  for (ErrorSurface::iterator i = begin(); i != end(); ++i) +    //delete i->delta; +    ; +} + +void ErrorSurface::Serialize(std::string* out) const { +  const int segments = this->size(); +  ostringstream os(ios::binary); +  os.write((const char*)&segments,sizeof(segments)); +  for (int i = 0; i < segments; ++i) { +    const ErrorSegment& cur = (*this)[i]; +    string senc; +    cur.delta->Encode(&senc); +    assert(senc.size() < 256); +    unsigned char len = senc.size(); +    os.write((const char*)&cur.x, sizeof(cur.x)); +    os.write((const char*)&len, sizeof(len)); +    os.write((const char*)&senc[0], len); +  } +  *out = os.str(); +} + +void ErrorSurface::Deserialize(ScoreType type, const std::string& in) { +  istringstream is(in, ios::binary);  +  int segments; +  is.read((char*)&segments, sizeof(segments)); +  this->resize(segments); +  for (int i = 0; i < segments; ++i) { +    ErrorSegment& cur = (*this)[i]; +    unsigned char len; +    is.read((char*)&cur.x, sizeof(cur.x)); +    is.read((char*)&len, sizeof(len)); +    string senc(len, '\0'); assert(senc.size() == len); +    is.read((char*)&senc[0], len); +    cur.delta = SentenceScorer::CreateScoreFromString(type, senc); +  } +} + | 
