You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
264 lines
6.6 KiB
264 lines
6.6 KiB
//
|
|
// WordReference.h
|
|
//
|
|
// NAME
|
|
// inverted index occurrence.
|
|
//
|
|
// SYNOPSIS
|
|
//
|
|
// #include <WordReference.h>
|
|
//
|
|
// WordReference wordRef("word");
|
|
// WordReference wordRef();
|
|
// WordReference wordRef(WordKey("key <DEF> 1 2"), WordRecord());
|
|
//
|
|
// WordKey& key = wordRef.Key();
|
|
// WordKey& record = wordRef.Record();
|
|
//
|
|
// wordRef.Clear();
|
|
//
|
|
// DESCRIPTION
|
|
//
|
|
// A <i>WordReference</i> object is an agregate of a <i>WordKey</i> object
|
|
// and a <i>WordRecord</i> object.
|
|
//
|
|
// ASCII FORMAT
|
|
//
|
|
// The ASCII description is a string with fields separated by tabs or
|
|
// white space. It is made of the ASCII description of a
|
|
// <i>WordKey</i> object immediately followed by the ASCII
|
|
// description of a <i>WordRecord</i> object. See the corresponding
|
|
// manual pages for more information.
|
|
//
|
|
// END
|
|
//
|
|
// Part of the ht://Dig package <http://www.htdig.org/>
|
|
// 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
|
|
// <http://www.gnu.org/copyleft/lgpl.html>
|
|
//
|
|
// $Id: WordReference.h,v 1.7 2004/05/28 13:15:28 lha Exp $
|
|
//
|
|
#ifndef _WordReference_h_
|
|
#define _WordReference_h_
|
|
|
|
#ifndef SWIG
|
|
#include "htString.h"
|
|
#include "WordRecord.h"
|
|
#include "WordKey.h"
|
|
#endif /* SWIG */
|
|
|
|
//
|
|
// Describe the WordKey/WordRecord pair
|
|
//
|
|
class WordReference : public Object
|
|
{
|
|
public:
|
|
//
|
|
// Construction/Destruction
|
|
//-
|
|
// Constructor. Build an object with empty key and empty record.
|
|
//
|
|
WordReference() {}
|
|
#ifndef SWIG
|
|
//-
|
|
// Constructor. Build an object from disk representation of <b>key</b>
|
|
// and <b>record</b>.
|
|
//
|
|
WordReference(const String& key0, const String& record0) {
|
|
Unpack(key0, record0);
|
|
}
|
|
//-
|
|
// Constructor. Build an object with key word set to <b>word</b>
|
|
// and otherwise empty and empty record.
|
|
//
|
|
WordReference(const String& word) {
|
|
Clear();
|
|
key.SetWord(word);
|
|
}
|
|
#endif /* SWIG */
|
|
~WordReference() {}
|
|
|
|
//-
|
|
// Reset to empty key and record
|
|
//
|
|
void Clear() { key.Clear(); record.Clear(); }
|
|
|
|
//
|
|
// Accessors
|
|
//-
|
|
// Return the key object.
|
|
//
|
|
WordKey& Key() { return key; }
|
|
#ifndef SWIG
|
|
//-
|
|
// Return the key object as const.
|
|
//
|
|
const WordKey& Key() const { return key; }
|
|
#endif /* SWIG */
|
|
//-
|
|
// Return the record object.
|
|
//
|
|
WordRecord& Record() { return record; }
|
|
#ifndef SWIG
|
|
//-
|
|
// Return the record object as const.
|
|
//
|
|
const WordRecord& Record() const { return record; }
|
|
#endif /* SWIG */
|
|
|
|
//
|
|
// Conversion
|
|
//
|
|
#ifdef SWIG
|
|
%name(SetKey)
|
|
#endif /* SWIG */
|
|
//-
|
|
// Copy <b>arg</b> in the key part of the object.
|
|
//
|
|
void Key(const WordKey& arg) { key = arg; }
|
|
#ifndef SWIG
|
|
//-
|
|
// Set key structure from disk storage format as found in
|
|
// <b>packed</b> string.
|
|
// Return OK if successfull, NOTOK otherwise.
|
|
//
|
|
int KeyUnpack(const String& packed) { return key.Unpack(packed); }
|
|
//
|
|
//-
|
|
// Convert key object into disk storage format as found in
|
|
// return the resulting string.
|
|
//
|
|
String KeyPack() const { String tmp; key.Pack(tmp); return tmp; }
|
|
//-
|
|
// Convert key object into disk storage format as found in
|
|
// and place the result in <b>packed</b> string.
|
|
// Return OK if successfull, NOTOK otherwise.
|
|
//
|
|
int KeyPack(String& packed) const { return key.Pack(packed); }
|
|
#endif /* SWIG */
|
|
|
|
#ifdef SWIG
|
|
%name(SetRecord)
|
|
#endif /* SWIG */
|
|
//-
|
|
// Copy <b>arg</b> in the record part of the object.
|
|
//
|
|
void Record(const WordRecord& arg) { record = arg; }
|
|
#ifndef SWIG
|
|
//-
|
|
// Set record structure from disk storage format as found in
|
|
// <b>packed</b> string.
|
|
// Return OK if successfull, NOTOK otherwise.
|
|
//
|
|
int RecordUnpack(const String& packed) { return record.Unpack(packed); }
|
|
//-
|
|
// Convert record object into disk storage format as found in
|
|
// return the resulting string.
|
|
//
|
|
String RecordPack() const { String tmp; record.Pack(tmp); return tmp; }
|
|
//-
|
|
// Convert record object into disk storage format as found in
|
|
// and place the result in <b>packed</b> string.
|
|
// Return OK if successfull, NOTOK otherwise.
|
|
//
|
|
int RecordPack(String& packed) const { return record.Pack(packed); }
|
|
|
|
//-
|
|
// Short hand for KeyPack(<b>ckey</b>) RecordPack(<b>crecord</b>).
|
|
//
|
|
inline int Pack(String& ckey, String& crecord) const {
|
|
if(key.Pack(ckey) == NOTOK) return NOTOK;
|
|
if(record.Pack(crecord) == NOTOK) return NOTOK;
|
|
return OK;
|
|
}
|
|
//-
|
|
// Short hand for KeyUnpack(<b>ckey</b>) RecordUnpack(<b>crecord</b>).
|
|
//
|
|
int Unpack(const String& ckey, const String& crecord) {
|
|
if(key.Unpack(ckey) == NOTOK) return NOTOK;
|
|
if(record.Unpack(crecord) == NOTOK) return NOTOK;
|
|
return OK;
|
|
}
|
|
#endif /* SWIG */
|
|
|
|
//
|
|
// Transformations
|
|
//
|
|
//-
|
|
// Merge key with other.Key() using the <i>WordKey::Merge</i> method:
|
|
// key.Merge(other.Key()).
|
|
// See the corresponding manual page for details. Copy other.record
|
|
// into the record part of the object.
|
|
//
|
|
int Merge(const WordReference& other);
|
|
#ifndef SWIG
|
|
//-
|
|
// Copy <b>master</b> before merging with <b>master.</b>Merge(<b>slave</b>)
|
|
// and return the copy. Prevents alteration of <b>master</b>.
|
|
//
|
|
static WordReference Merge(const WordReference& master, const WordReference& slave) {
|
|
WordReference tmp(master);
|
|
tmp.Merge(slave);
|
|
return tmp;
|
|
}
|
|
#endif /* SWIG */
|
|
|
|
#ifndef SWIG
|
|
int compare(Object *to) { String word(((WordReference *) to)->key.GetWord()); return key.GetWord().nocase_compare(word); }
|
|
#endif /* SWIG */
|
|
|
|
#ifndef SWIG
|
|
//
|
|
// Set the whole structure from ASCII string description
|
|
//
|
|
//-
|
|
// Set the whole structure from ASCII string in <b>bufferin</b>.
|
|
// See <i>ASCII FORMAT</i> section.
|
|
// Return OK if successfull, NOTOK otherwise.
|
|
//
|
|
int Set(const String& bufferin);
|
|
int SetList(StringList& fields);
|
|
//-
|
|
// Convert the whole structure to an ASCII string description
|
|
// in <b>bufferout.</b>
|
|
// See <i>ASCII FORMAT</i> section.
|
|
// Return OK if successfull, NOTOK otherwise.
|
|
//
|
|
int Get(String& bufferout) const;
|
|
//-
|
|
// Convert the whole structure to an ASCII string description
|
|
// and return it.
|
|
// See <i>ASCII FORMAT</i> section.
|
|
//
|
|
String Get() const;
|
|
#endif /* SWIG */
|
|
|
|
//
|
|
// Debuging
|
|
//
|
|
#ifndef SWIG
|
|
//-
|
|
// Print object in ASCII form on <b>f</b> (uses <i>Get</i> method).
|
|
// See <i>ASCII FORMAT</i> section.
|
|
//
|
|
int Write(FILE* f) const;
|
|
#endif /* SWIG */
|
|
//-
|
|
// Print object in ASCII form on <b>stdout</b> (uses <i>Get</i> method).
|
|
// See <i>ASCII FORMAT</i> section.
|
|
//
|
|
void Print() const;
|
|
|
|
protected:
|
|
|
|
#ifndef SWIG
|
|
WordKey key;
|
|
WordRecord record;
|
|
#endif /* SWIG */
|
|
};
|
|
|
|
#endif /* _WordReference_h */
|
|
|