blob: 9991cd08cfcdebba0ffb1ee635bbb7dfd673f088 [file] [log] [blame]
/*
* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team
*
* Distributable under the terms of either the Apache License (Version 2.0) or
* the GNU Lesser General Public License, as specified in the COPYING file.
*
* Changes are Copyright(C) 2007, 2008 by Nokia Corporation and/or its subsidiary(-ies), all rights reserved.
*/
#ifndef _lucene_util_Equators_
#define _lucene_util_Equators_
#if defined(_LUCENE_PRAGMA_ONCE)
# pragma once
#endif
#include <QtCore/QString>
//#ifdef QT_LINUXBASE
// we are going to use qreal now, we basically maintain our own clucene anyway
//// LSB doesn't define float_t - see http://bugs.linuxbase.org/show_bug.cgi?id=2374
//typedef float float_t;
//#endif
CL_NS_DEF(util)
///////////////////////////////////////////////////////////////////////////////
// Equators
///////////////////////////////////////////////////////////////////////////////
class Equals{
public:
class Int32:public CL_NS_STD(binary_function)<const int32_t*,const int32_t*,bool>
{
public:
bool operator()( const int32_t val1, const int32_t val2 ) const;
};
class Char:public CL_NS_STD(binary_function)<const char*,const char*,bool>
{
public:
bool operator()( const char* val1, const char* val2 ) const;
};
#ifdef _UCS2
class WChar: public CL_NS_STD(binary_function)<const wchar_t*,const wchar_t*,bool>
{
public:
bool operator()( const wchar_t* val1, const wchar_t* val2 ) const;
};
class TChar: public WChar{
};
#else
class TChar: public Char{
};
#endif
template<typename _cl>
class Void:public CL_NS_STD(binary_function)<const void*,const void*,bool>
{
public:
bool operator()( _cl* val1, _cl* val2 ) const{
return val1==val2;
}
};
class Qstring : public CL_NS_STD(binary_function)<const QString&, const QString&, bool>
{
public:
bool operator() (const QString& val1, const QString& val2) const;
};
};
///////////////////////////////////////////////////////////////////////////////
// Comparors
///////////////////////////////////////////////////////////////////////////////
class Comparable : LUCENE_BASE
{
public:
virtual ~Comparable(){
}
virtual int32_t compareTo(void* o) = 0;
};
/** @internal */
class Compare{
public:
class _base
{ // traits class for hash containers
public:
enum
{ // parameters for hash table
bucket_size = 4, // 0 < bucket_size
min_buckets = 8
}; // min_buckets = 2 ^^ N, 0 < N
_base()
{
}
};
class Int32:public _base, public Comparable{
int32_t value;
public:
int32_t getValue() const;
Int32(int32_t val);
Int32();
int32_t compareTo(void* o);
bool operator()( int32_t t1, int32_t t2 ) const;
size_t operator()( int32_t t ) const;
};
class Float:public Comparable{
qreal value;
public:
qreal getValue() const;
Float(qreal val);
int32_t compareTo(void* o);
};
class Char: public _base //<char*>
{
public:
bool operator()( const char* val1, const char* val2 ) const;
size_t operator()( const char* val1) const;
};
#ifdef _UCS2
class WChar: public _base //<wchar_t*>
{
public:
bool operator()( const wchar_t* val1, const wchar_t* val2 ) const;
size_t operator()( const wchar_t* val1) const;
};
#endif
class TChar: public _base, public Comparable{
const TCHAR* s;
public:
const TCHAR* getValue() const;
TChar();
TChar(const TCHAR* str);
int32_t compareTo(void* o);
bool operator()( const TCHAR* val1, const TCHAR* val2 ) const;
size_t operator()( const TCHAR* val1) const;
};
template<typename _cl>
class Void:public _base //<const void*,const void*,bool>
{
public:
int32_t compareTo(_cl* o){
if ( this == o )
return o;
else
return this > o ? 1 : -1;
}
bool operator()( _cl* t1, _cl* t2 ) const{
return t1 > t2 ? true : false;
}
size_t operator()( _cl* t ) const{
return (size_t)t;
}
};
class Qstring : public _base
{
public:
bool operator() (const QString& val1, const QString& val2) const;
size_t operator() (const QString& val1) const;
};
};
///////////////////////////////////////////////////////////////////////////////
// allocators
///////////////////////////////////////////////////////////////////////////////
class Deletor
{
public:
template<typename _kt>
class Array{
public:
static void doDelete(_kt* arr){
_CLDELETE_LARRAY(arr);
}
};
class tcArray{
public:
static void doDelete(const TCHAR* arr){
_CLDELETE_CARRAY(arr);
}
};
class acArray{
public:
static void doDelete(const char* arr){
_CLDELETE_CaARRAY(arr);
}
};
class Unintern{
public:
static void doDelete(TCHAR* arr);
};
template<typename _kt>
class Object{
public:
static void doDelete(_kt* obj){
_CLLDELETE(obj);
}
};
template<typename _kt>
class Void{
public:
static void doDelete(_kt* obj){
_CLVDELETE(obj);
}
};
class Dummy{
public:
static void doDelete(const void* nothing)
{
// TODO: remove all occurances where it hits this point
// CND_WARNING(false, "Deletor::Dummy::doDelete run, set deleteKey
// or deleteValue to false");
}
};
class DummyInt32{
public:
static void doDelete(const int32_t nothing){
}
};
class DummyFloat{
public:
static void doDelete(const qreal nothing){
}
};
template <typename _type>
class ConstNullVal{
public:
static void doDelete(const _type nothing)
{
// TODO: remove all occurances where it hits this point
// CND_WARNING(false, "Deletor::Dummy::doDelete run, set deleteKey
// or deleteValue to false");
}
};
template <typename _type>
class NullVal{
public:
static void doDelete(_type nothing)
{
// TODO: remove all occurances where it hits this point
// CND_WARNING(false, "Deletor::Dummy::doDelete run, set deleteKey
// or deleteValue to false");
}
};
class DummyQString {
public:
static void doDelete(const QString& nothing) {
}
};
};
////////////////////////////////////////////////////////////////////////////////
CL_NS_END
#endif