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.
80 lines
2.9 KiB
80 lines
2.9 KiB
/* |
|
This file is part of Konsole, an X terminal. |
|
|
|
Copyright 2007-2008 by Robert Knight <robertknight@gmail.com> |
|
|
|
This program is free software; you can redistribute it and/or modify |
|
it under the terms of the GNU General Public License as published by |
|
the Free Software Foundation; either version 2 of the License, or |
|
(at your option) any later version. |
|
|
|
This program is distributed in the hope that it will be useful, |
|
but WITHOUT ANY WARRANTY; without even the implied warranty of |
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|
GNU General Public License for more details. |
|
|
|
You should have received a copy of the GNU General Public License |
|
along with this program; if not, write to the Free Software |
|
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA |
|
02110-1301 USA. |
|
*/ |
|
|
|
#ifndef EXTENDEDCHARTABLE_H |
|
#define EXTENDEDCHARTABLE_H |
|
|
|
// Qt |
|
#include <QHash> |
|
|
|
namespace Konsole { |
|
/** |
|
* A table which stores sequences of unicode characters, referenced |
|
* by hash keys. The hash key itself is the same size as a unicode |
|
* character ( uint ) so that it can occupy the same space in |
|
* a structure. |
|
*/ |
|
class ExtendedCharTable |
|
{ |
|
public: |
|
/** Constructs a new character table. */ |
|
ExtendedCharTable(); |
|
~ExtendedCharTable(); |
|
|
|
/** |
|
* Adds a sequences of unicode characters to the table and returns |
|
* a hash code which can be used later to look up the sequence |
|
* using lookupExtendedChar() |
|
* |
|
* If the same sequence already exists in the table, the hash |
|
* of the existing sequence will be returned. |
|
* |
|
* @param unicodePoints An array of unicode character points |
|
* @param length Length of @p unicodePoints |
|
*/ |
|
uint createExtendedChar(const uint *unicodePoints, ushort length); |
|
/** |
|
* Looks up and returns a pointer to a sequence of unicode characters |
|
* which was added to the table using createExtendedChar(). |
|
* |
|
* @param hash The hash key returned by createExtendedChar() |
|
* @param length This variable is set to the length of the |
|
* character sequence. |
|
* |
|
* @return A unicode character sequence of size @p length. |
|
*/ |
|
uint *lookupExtendedChar(uint hash, ushort &length) const; |
|
|
|
/** The global ExtendedCharTable instance. */ |
|
static ExtendedCharTable instance; |
|
private: |
|
// calculates the hash key of a sequence of unicode points of size 'length' |
|
uint extendedCharHash(const uint *unicodePoints, ushort length) const; |
|
// tests whether the entry in the table specified by 'hash' matches the |
|
// character sequence 'unicodePoints' of size 'length' |
|
bool extendedCharMatch(uint hash, const uint *unicodePoints, ushort length) const; |
|
// internal, maps hash keys to character sequence buffers. The first uint |
|
// in each value is the length of the buffer, followed by the uints in the buffer |
|
// themselves. |
|
QHash<uint, uint *> _extendedCharTable; |
|
}; |
|
} |
|
#endif // end of EXTENDEDCHARTABLE_H
|
|
|