- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
class TCP1251ToUTF16StringConverter
{
public:
static WideChar convert(Char Source)
{
WideChar Result=static_cast<unsigned char>(Source);
const WideChar Russian_YO=static_cast<unsigned char>('Ё');
const WideChar Russian_yo=static_cast<unsigned char>('ё');
const WideChar RussianWide_YO=L'Ё';
const WideChar RussianWide_yo=L'ё';
const WideChar Russian_A=static_cast<unsigned char>('А');
const WideChar RussianWide_A=L'А';
const unsigned int AmountOfSymbols=0x40;
if(Result==Russian_YO)
return RussianWide_YO;
if(Result==Russian_yo)
return RussianWide_yo;
if(Result>=Russian_A&&Result<Russian_A+AmountOfSymbols)
return (Result-Russian_A+RussianWide_A);
return Result;
};
static void convert(PwideChar UTF16StringDestination, PChar CP1251WinEngRusStringSource, const size_t TextLength)
{
assert(CP1251WinEngRusStringSource!=NULL);
size_t i=0;
for(;;)
{
if(i>=TextLength)
break;
assert(i<TextLength);
Char CP1251SourceChar=CP1251WinEngRusStringSource[i];
if(CP1251SourceChar=='\0')
break;
UTF16StringDestination[i]=convert(CP1251SourceChar);
++i;
};
UTF16StringDestination[i]=L'\0';
assert(i<=TextLength);
};
static std::wstring convert(const std::string& CP1251WinEngRusStringSource)
{
assert(CP1251WinEngRusStringSource.c_str()!=NULL);
std::wstring UTF16StringDestination;
std::transform(CP1251WinEngRusStringSource.begin(), CP1251WinEngRusStringSource.end(), std::inserter(UTF16StringDestination, UTF16StringDestination.end())/*std::back_inserter(UTF16StringDestination)*//*VC 6.0 compatible*/, makePointerToFunction(convertChar));
return UTF16StringDestination;
};
private:
static WideChar convertChar(char Source)
{
return convert(Source);
};
};
template<const size_t MaxAmountOfChar>
class TCP1251ToUTF16StringInPlaceConverter
{
public:
TCP1251ToUTF16StringInPlaceConverter(PChar CP1251WinEngRusStringSource)
{
STATIC_ASSERT(MaxAmountOfChar>0, MaxAmountOfChar_must_be_above_zero);
TCP1251ToUTF16StringConverter::convert(&(_buffer[0]), CP1251WinEngRusStringSource, MaxAmountOfChar);
};
TCP1251ToUTF16StringInPlaceConverter(PChar CP1251WinEngRusStringSource, const size_t TextLength)
{
STATIC_ASSERT(MaxAmountOfChar>0, MaxAmountOfChar_must_be_above_zero);
assert(TextLength<=MaxAmountOfChar);
TCP1251ToUTF16StringConverter::convert(&(_buffer[0]), CP1251WinEngRusStringSource, TextLength);
};
void convert(PChar CP1251WinEngRusStringSource)
{
TCP1251ToUTF16StringConverter::convert(&(_buffer[0]), CP1251WinEngRusStringSource, MaxAmountOfChar);
};
void convert(PChar CP1251WinEngRusStringSource, const size_t TextLength)
{
assert(TextLength<=MaxAmountOfChar);
TCP1251ToUTF16StringConverter::convert(&(_buffer[0]), CP1251WinEngRusStringSource, TextLength);
};
PWideChar Get(void) const
{
return &(_buffer[0]);
};
PwideChar Get(void)
{
return &(_buffer[0]);
};
wideChar _buffer[MaxAmountOfChar+1];
};
USB 02.08.2012 11:28 # 0
- Не, не слышал.
Psionic 02.08.2012 11:37 # +1
absolut 02.08.2012 11:39 # +1
defecate-plusplus 02.08.2012 11:48 # +3
это на работе USB так говнокодят?
roman-kashitsyn 02.08.2012 11:53 # +3
defecate-plusplus 02.08.2012 11:57 # +3
bormand 02.08.2012 12:00 # +6
vistefan 02.08.2012 12:06 # +3
Одно дело похамить модерам, или ещё что, но он, зараза, и матерится и виртуалов разводит.
sayidandrtfm 02.08.2012 12:23 # +2
И вообще, нужен раздел статистика, с графиками и пони.
defecate-plusplus 02.08.2012 12:26 # +2
sayidandrtfm 02.08.2012 12:28 # +2
Обновление Граватара работает с разными интервалами, а может ГК...
bormand 02.08.2012 13:03 # 0
UPD:
Cache-Control: max-age=300
Date: Thu, 02 Aug 2012 10:07:18 GMT
Expires: Thu, 02 Aug 2012 10:11:04 GMT
Хмм... всего 5 минут...
sayidandrtfm 02.08.2012 13:12 # 0
Заходил, выходил, на граватаре всё удалил одну оставил...
только после ~15-18 минут изменилась.
А эта через ~2-3мин. Предполагаю: движок ГК так устроен.
bormand 02.08.2012 13:22 # +1
(в вашем случае 933a80ef5fbe8da14b9bf9b392159345)
и адреса альтернативной картинки (которую вы видите на моем аватаре). Так что движок ГК, в теории, влиять на аватарку не должен.
SmackMyBitchUp 02.08.2012 13:48 # +1
sayidandrtfm 02.08.2012 13:54 # +2
bormand 02.08.2012 15:33 # +1
dos_ 02.08.2012 18:09 # 0
absolut 02.08.2012 19:38 # 0
vistefan 02.08.2012 12:08 # +1
defecate-plusplus 02.08.2012 12:12 # +4
писать свои нетленки и жрать пирожки
а анальная псевдомодерация - лишь жалкое прикрытие, шитое белыми нитками
3.14159265 02.08.2012 13:51 # +3
vistefan 02.08.2012 14:37 # +3
roman-kashitsyn 02.08.2012 14:51 # +3
vistefan 02.08.2012 15:28 # +3
rat4 02.08.2012 12:12 # +3
roman-kashitsyn 02.08.2012 13:26 # +4
bormand 02.08.2012 13:27 # +3
fix
movaxbx 02.08.2012 13:04 # +2
Russian wide, yo, bitch.
голосом Пинкмана из BrBa
kipar 02.08.2012 14:23 # +3
USB 02.08.2012 14:53 # +2
Неужели это кто-то скопипастил у кококого-то говнокодера? Как тесен мир.
USB 02.08.2012 15:04 # +1
absolut 02.08.2012 15:05 # +4
USB 02.08.2012 15:09 # 0
USB 02.08.2012 23:48 # 0
absolut 03.08.2012 08:46 # 0
Psionic 03.08.2012 09:19 # 0
HaskellGovno 12.08.2012 21:32 # +2
Круговорот говна в природе.
bormand 02.08.2012 15:29 # +2
utf8 может занимать от одного до 3х байт.
// hash-таблица для преобразования WideChar в ansi
map_utf16_to_ansi: record
item_nexts: array[0..127] of byte;
hash_array: array[0..127] of byte;
end;
так как парсинги и прочие обработки относительно дороги и требуется свести их затратность к минимуму - я пишу атомарные функции на ассемблере
я фанат быстрого кода, поэтому я делаю то, что делаю
Геймдев такой геймдев...
USB 02.08.2012 15:46 # +1
Зачем? Это же медленнее и много затратнее по памяти гомнокода из нулевого поста.
bormand 02.08.2012 16:01 # +2
А если все символы расположены в первой плоскости - то самым скоростным решением будет тупой массив на 65536 чаров...
guest 03.08.2012 12:16 # +2
defecate-plusplus 03.08.2012 12:35 # +3
если конкретный UCS, и чтобы кроссплатформенно при этом - то пишешь сам или коммуниздишь чужой оттестированный codecvt
в boost не так давно заапрувили boost::locale (в 1.49, вроде), там в коробке всё есть