// // Part of the ht://Dig package // Copyright (c) 1999-2004 The ht://Dig Group // For copyright details, see the file COPYING in your distribution // or the GNU Library General Public License (LGPL) version 2 or later // // // // WordRecord.cc // // WordRecord: data portion of the inverted index database // #ifdef HAVE_CONFIG_H #include "htconfig.h" #endif /* HAVE_CONFIG_H */ #include #include "WordRecord.h" // // WordRecord implementation // // // Convert the whole structure to an ascii string description // int WordRecord::Get(String& buffer) const { buffer.trunc(); switch(type) { case WORD_RECORD_DATA: buffer << info.data; break; case WORD_RECORD_STATS: buffer << info.stats.noccurrence << "\t"; buffer << info.stats.ndoc; break; case WORD_RECORD_NONE: break; default: fprintf(stderr, "WordRecord::Get: unknown type %d\n", type); return NOTOK; break; } return OK; } String WordRecord::Get() const { String tmp; Get(tmp); return tmp; } // // Set a record from an ascii representation // int WordRecord::Set(const String& buffer) { StringList fields(buffer, "\t "); return SetList(fields); } int WordRecord::SetList(StringList& fields) { int i = 0; switch(type) { case WORD_RECORD_DATA: { String* field = (String*)fields.Get_First(); if(field == 0) { fprintf(stderr, "WordRecord::Set: failed to retrieve field %d\n", i); return NOTOK; } info.data = (unsigned int)atoi(field->get()); fields.Remove(field); i++; } break; case WORD_RECORD_STATS: { String* field = (String*)fields.Get_First(); if(field == 0) { fprintf(stderr, "WordRecord::Set: failed to retrieve field %d\n", i); return NOTOK; } info.stats.noccurrence = (unsigned int)atoi(field->get()); fields.Remove(field); i++; field = (String*)fields.Get_First(); if(field == 0) { fprintf(stderr, "WordRecord::Set: failed to retrieve field %d\n", i); return NOTOK; } info.stats.ndoc = (unsigned int)atoi(field->get()); fields.Remove(field); i++; } break; case WORD_RECORD_NONE: break; default: fprintf(stderr, "WordRecord::Set: unknown type %d\n", type); break; } return OK; } int WordRecord::Write(FILE* f) const { String tmp; Get(tmp); fprintf(f, "%s", (char*)tmp); return 0; } void WordRecord::Print() const { Write(stderr); }