|
|
|
/***************************************************************************
|
|
|
|
copyright : (C) 2003-2006 by Robby Stephenson
|
|
|
|
email : robby@periapsis.org
|
|
|
|
***************************************************************************/
|
|
|
|
|
|
|
|
/***************************************************************************
|
|
|
|
* *
|
|
|
|
* This program is free software; you can redistribute it and/or modify *
|
|
|
|
* it under the terms of version 2 of the GNU General Public License as *
|
|
|
|
* published by the Free Software Foundation; *
|
|
|
|
* *
|
|
|
|
***************************************************************************/
|
|
|
|
|
|
|
|
// this code was original published to the kde-core-devel email list
|
|
|
|
// copyright 2003 Harri Porten <porten@kde.org>
|
|
|
|
// Originally licensed under LGPL, included here under GPL v2
|
|
|
|
|
|
|
|
#ifndef LATIN1LITERAL_H
|
|
|
|
#define LATIN1LITERAL_H
|
|
|
|
|
|
|
|
#include <tqstring.h>
|
|
|
|
|
|
|
|
namespace Tellico {
|
|
|
|
|
|
|
|
/**
|
|
|
|
* A class for explicit marking of string literals encoded in the ISO
|
|
|
|
* 8859-1 character set. Allows for efficient, still (in terms of the
|
|
|
|
* chosen encoding) safe comparison with TQString instances. To be used
|
|
|
|
* like this:
|
|
|
|
*
|
|
|
|
* \code
|
|
|
|
* TQString s = .....
|
|
|
|
* if (s == Latin1Literal("o")) { ..... }
|
|
|
|
* \endcode
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
#define Latin1Literal(s) \
|
|
|
|
Tellico::Latin1LiteralInternal((s), sizeof(s)/sizeof(char)-1)
|
|
|
|
|
|
|
|
class Latin1LiteralInternal {
|
|
|
|
|
|
|
|
public:
|
|
|
|
Latin1LiteralInternal(const char* s, size_t l)
|
|
|
|
: str(s), len(s ? l : (size_t)-1) { }
|
|
|
|
|
|
|
|
// this is lazy, leave these public since I can't figure out
|
|
|
|
// how to declare a friend function that works for gcc 2.95
|
|
|
|
const char* str;
|
|
|
|
size_t len;
|
|
|
|
};
|
|
|
|
|
|
|
|
} // end namespace
|
|
|
|
|
|
|
|
inline
|
|
|
|
bool operator==(const TQString& s1, const Tellico::Latin1LiteralInternal& s2) {
|
|
|
|
const TQChar* uc = s1.unicode();
|
|
|
|
const char* c = s2.str;
|
|
|
|
if(!c || !uc) {
|
|
|
|
return (!c && !uc);
|
|
|
|
}
|
|
|
|
|
|
|
|
const size_t& l = s2.len;
|
|
|
|
if(s1.length() != l) {
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
|
|
|
|
for(size_t i = 0; i < l; ++i, ++uc, ++c) {
|
|
|
|
if(uc->unicode() != static_cast<uchar>(*c)) {
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
|
|
|
inline
|
|
|
|
bool operator!=(const TQString& s1, const Tellico::Latin1LiteralInternal& s2) {
|
|
|
|
return !(s1 == s2);
|
|
|
|
}
|
|
|
|
|
|
|
|
inline
|
|
|
|
bool operator==(const Tellico::Latin1LiteralInternal& s1, const TQString& s2) {
|
|
|
|
return s2 == s1;
|
|
|
|
}
|
|
|
|
|
|
|
|
inline
|
|
|
|
bool operator!=(const Tellico::Latin1LiteralInternal& s1, const TQString& s2) {
|
|
|
|
return !(s2 == s1);
|
|
|
|
}
|
|
|
|
|
|
|
|
#endif
|