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.
147 lines
3.1 KiB
147 lines
3.1 KiB
//
|
|
// WeightWord.cc
|
|
//
|
|
// WeightWord: Contains the information necessary for a particular search word
|
|
// including the resulting weight (scaling factor) and
|
|
// whether the word should be hidden (ignored).
|
|
//
|
|
// Part of the ht://Dig package <http://www.htdig.org/>
|
|
// Copyright (c) 1995-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: WeightWord.cc,v 1.10 2004/05/28 13:15:24 lha Exp $
|
|
//
|
|
|
|
#ifdef HAVE_CONFIG_H
|
|
#include "htconfig.h"
|
|
#endif /* HAVE_CONFIG_H */
|
|
|
|
#include "WeightWord.h"
|
|
|
|
#ifdef HAVE_STD
|
|
#include <fstream>
|
|
#ifdef HAVE_NAMESPACES
|
|
using namespace std;
|
|
#endif
|
|
#else
|
|
#include <fstream.h>
|
|
#endif /* HAVE_STD */
|
|
|
|
//***************************************************************************
|
|
// WeightWord::WeightWord()
|
|
//
|
|
WeightWord::WeightWord()
|
|
{
|
|
weight = 1;
|
|
records = 0;
|
|
isExact = 0;
|
|
isHidden = 0;
|
|
isIgnore = 0;
|
|
|
|
flags = FLAGS_MATCH_ONE;
|
|
}
|
|
|
|
|
|
//***************************************************************************
|
|
// WeightWord::WeightWord(WeightWord *ww)
|
|
//
|
|
WeightWord::WeightWord(WeightWord *ww)
|
|
{
|
|
weight = ww->weight;
|
|
records = ww->records;
|
|
isExact = ww->isExact;
|
|
isHidden = ww->isHidden;
|
|
flags = ww->flags;
|
|
word = ww->word;
|
|
isIgnore = 0;
|
|
}
|
|
|
|
|
|
//***************************************************************************
|
|
// WeightWord::WeightWord(char *word, double weight)
|
|
//
|
|
WeightWord::WeightWord(char *word, double weight)
|
|
{
|
|
records = 0;
|
|
isExact = 0;
|
|
isHidden = 0;
|
|
isIgnore = 0;
|
|
|
|
// allow a match with any field
|
|
flags = FLAGS_MATCH_ONE;
|
|
|
|
set(word);
|
|
this->weight = weight;
|
|
}
|
|
|
|
//***************************************************************************
|
|
// WeightWord::WeightWord(char *word, double weight, unsigned int f)
|
|
//
|
|
WeightWord::WeightWord(char *word, double weight, unsigned int f)
|
|
{
|
|
records = 0;
|
|
|
|
flags = f;
|
|
// if no fields specified, allow a match with any field
|
|
if (!(flags & FLAGS_MATCH_ONE))
|
|
flags ^= FLAGS_MATCH_ONE;
|
|
|
|
// ideally, these flags should all just be stored in a uint...
|
|
isExact = ((flags & FLAG_EXACT) != 0);
|
|
isHidden = ((flags & FLAG_HIDDEN) != 0);
|
|
isIgnore = ((flags & FLAG_IGNORE) != 0);
|
|
|
|
set(word);
|
|
this->weight = weight;
|
|
}
|
|
|
|
|
|
//***************************************************************************
|
|
// WeightWord::~WeightWord()
|
|
//
|
|
WeightWord::~WeightWord()
|
|
{
|
|
}
|
|
|
|
|
|
//***************************************************************************
|
|
// void WeightWord::set(char *word)
|
|
//
|
|
void WeightWord::set(char *word)
|
|
{
|
|
#if 0
|
|
isExact = 0;
|
|
isHidden = 0;
|
|
while (strchr(word, ':'))
|
|
{
|
|
//
|
|
// This word contains modifiers.
|
|
//
|
|
if (mystrncasecmp(word, "exact:", 6) == 0)
|
|
{
|
|
word += 6;
|
|
isExact = 1;
|
|
}
|
|
else if (mystrncasecmp(word, "hidden:", 7) == 0)
|
|
{
|
|
word += 7;
|
|
isHidden = 1;
|
|
}
|
|
else
|
|
{
|
|
//
|
|
// There is a ':' but not a valid attribute. It must be part
|
|
// of the word we are searching for.
|
|
//
|
|
break;
|
|
}
|
|
|
|
}
|
|
#endif
|
|
this->word = word;
|
|
this->word.lowercase();
|
|
}
|
|
|