1
/*****************************************************************
2
* Unipro UGENE - Integrated Bioinformatics Suite
3
* Copyright (C) 2008 Unipro, Russia (http://ugene.unipro.ru)
6
* This source code is distributed under the terms of the
7
* GNU General Public License. See the files COPYING and LICENSE
9
*****************************************************************/
11
#include "TextUtils.h"
17
static QBitArray getAlphas();
18
static QBitArray getAlphaNums();
19
static QBitArray getNums();
20
static QBitArray getWhites();
21
static QBitArray getLines();
22
static QBitArray getBinary();
23
static QByteArray getUpperCaseMap();
24
static QByteArray getLowerCaseMap();
25
static QByteArray getSpaceLine();
27
const QBitArray TextUtils::ALPHAS = getAlphas();
28
const QBitArray TextUtils::ALPHA_NUMS = getAlphaNums();
29
const QBitArray TextUtils::NUMS = getNums();
30
const QBitArray TextUtils::WHITES = getWhites();
31
const QBitArray TextUtils::LINE_BREAKS = getLines();
32
const QBitArray TextUtils::BINARY = getBinary();
33
const QByteArray TextUtils::UPPER_CASE_MAP = getUpperCaseMap();
34
const QByteArray TextUtils::LOWER_CASE_MAP = getLowerCaseMap();
35
const QByteArray TextUtils::SPACE_LINE = getSpaceLine();
37
//TODO: optimize shared data structs access! -> replace it with arrays with bounds checking in debug
39
static QBitArray getEmptyBitMap() {
40
return QBitArray(256);
43
static QBitArray getBinary() {
44
QBitArray res = getEmptyBitMap();
45
res.fill(true, 0, 31);
50
static QBitArray getAlphaNums() {
51
QBitArray res = getAlphas();
57
static QBitArray getAlphas() {
58
QBitArray res = getEmptyBitMap();
59
res.fill(true, 'A', 'Z'+1);
60
res.fill(true, 'a', 'z'+1);
64
static QBitArray getNums() {
65
QBitArray res = getEmptyBitMap();
66
res.fill(true, '0', '9'+1);
70
static QBitArray getWhites() {
71
//'\t', '\n', '\v', '\f', '\r', and ' '
72
QBitArray res = getEmptyBitMap();
73
res['\t']=res['\n']=res['\v']=res['\f']=res['\r']=res[' ']=true;
77
QBitArray getLines() {
78
QBitArray res = getEmptyBitMap();
79
res['\r'] = res['\n'] = true;
83
QBitArray TextUtils::createBitMap(char c1) {
84
QBitArray res = getEmptyBitMap();
89
QByteArray TextUtils::createMap(const QBitArray& bits, char defaultChar) {
90
assert(bits.size() == 256);
91
QByteArray res(256, 0);
92
for(int i=0;i<256; i++) {
93
res[i] = bits[i] ? (char)i : defaultChar;
98
static QByteArray getUpperCaseMap() {
100
for(int i=0;i<b.size();i++) {
102
if (c >= 'a' && c<='z') {
110
static QByteArray getLowerCaseMap() {
111
QByteArray b(256, 0);
112
for(int i=0;i<b.size();i++) {
114
if (c >= 'A' && c<='Z') {
123
static QByteArray getSpaceLine() {
124
QByteArray res(4096, ' ');
129
QString TextUtils::variate(const QString& prefix, const QString& sep, const QSet<QString>& filter, bool mustHaveSuffix, int startSeed) {
130
int seed = startSeed;
131
QString res = prefix;
132
if (!mustHaveSuffix && !filter.contains(res)) {
136
res = prefix + sep + QString::number(seed++);
137
} while (filter.contains(res));