crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

> Адекватная замена для MS STL deque?, нужна замена в связи с багой в MS STL
Iron Bug
  опции профиля:
сообщение 6.10.2010, 13:45
Сообщение #1


Профессионал
*****

Группа: Модератор
Сообщений: 1611
Регистрация: 6.2.2009
Из: Yekaterinburg
Пользователь №: 533

Спасибо сказали: 219 раз(а)




Репутация:   12  


В связи с обнаружившейся страшной багой ищу какую-нибудь опенсорцную реализацию дека (ну или хотя бы очереди с итератором или оператором []).

Поиск по гуглу пока не дал ничего вразумительного (слишком распространённое название - deque), а свой огород городить банально не хватает времени... :( Конечно, если не найду, то придётся возиться с динамическими массивами, а у меня ещё дофига другой работы, причём довольно срочной.
Может, кто подскажет такую готовую библиотечку на С++ или С?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
 
Начать новую тему
Ответов
Iron Bug
  опции профиля:
сообщение 11.10.2010, 13:21
Сообщение #2


Профессионал
*****

Группа: Модератор
Сообщений: 1611
Регистрация: 6.2.2009
Из: Yekaterinburg
Пользователь №: 533

Спасибо сказали: 219 раз(а)




Репутация:   12  


Аццкая жесть или как под вендой заставить STLport выводить в консоль русские буквы (ну или какие-либо, которые в коде присустствуют) в UTF-8 (убила целый день, чтобы просечь, как это сделать!). Суть была в том, чтобы не переписывать кучу проектов под STLport iostreams.

Частично стащено отсюда, поправлены ошибки и выдернута часть только для венды (для линя и так всё работает, без особого выпендрёжа). Честно говоря, вдаваться в тонкости и разбираться во всех хитросплетениях локалей (а это самое моё ненавистное место в программах!) мне не хотелось. Это решение маленькое, возможно, не самое оптимальное, но оно РАБОТАЕТ.

Раскрывающийся текст
#include <Windows.h>
#include <iostream>
#include <locale>
#include <set>
#include <stdexcept>
#include <stdio.h>

using namespace std;

void configure_locale() {
    //Decoding of wchar in output only happens in unsynced mode.  
    ios::sync_with_stdio(false);
    //Platform dependent locale name building. Needed only for output encoding.
    char localeString[200];

    const int bufferLength=100;
    char buffer[bufferLength];
    // Obtaining user language
    long rc=GetLocaleInfo(GetUserDefaultLCID(), LOCALE_SISO639LANGNAME, (LPWSTR)buffer, bufferLength);
    
    //Checking for errors. Error codes taken from MSDN. Neither of them happened earlier.
    if (!rc) {
        switch (GetLastError()) {
        case ERROR_INSUFFICIENT_BUFFER:
            throw runtime_error("Insufficient buffer size while retrieving language info");
        case ERROR_INVALID_FLAGS:
            throw runtime_error("Invalid flags while retrieving language info");
        case ERROR_INVALID_PARAMETER:
            throw runtime_error("Invalid parameter while retrieving language info");
        default:
            throw runtime_error("Unknown error while retrieving language info");
        }
    }
    // Obtaining codepage. In sltport we may also use a string "OCP" instead of value returned by GetConsoleOutputCP().
    long cpInt=GetConsoleOutputCP();
    sprintf_s(localeString,100,"%ws.%d",buffer,cpInt);

    //A new short locale name is built. We can use it to init encoding conversions.
    typedef codecvt<wchar_t, char, mbstate_t> Code;
    Code * code=new codecvt_byname<wchar_t, char, mbstate_t>(localeString);
    //Resetiing global locale object.
    locale::global(locale(locale(localeString), code));
    //We should imbue new locale in iostreams.
    typedef set<wostream::_Basic_ios  *> Streams;
    Streams streams;
    streams.insert(&wcout);
    streams.insert(&wcerr);
    streams.insert(&wclog);
    streams.insert(&wcin);
    for (Streams::iterator i=streams.begin(); i!=streams.end(); i++) {
        if (!(*i))
            continue;
        (*i)->imbue(locale());
        (*i)->rdbuf()->pubimbue(locale());
    }
}

Используется просто вызовом
_wsetlocale(LC_ALL,L"russian");
configure_locale();

перед началом работы. Собирается с опциями использования юникода.
Вывод стандартный:
wcout << L"Русский текст";


Сообщение отредактировал Iron Bug - 11.10.2010, 14:21
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Сообщений в этой теме
- Iron Bug   Адекватная замена для MS STL deque?   6.10.2010, 13:45
- - Алексей1153   а какие основные плюсы использования дека ? (не до...   6.10.2010, 13:52
- - Iron Bug   Цитата(Алексей1153 @ 6.10.2010, 16:52) а ...   6.10.2010, 13:58
- - Алексей1153   Цитата(Iron Bug @ 6.10.2010, 16:58) он не...   6.10.2010, 14:03
- - Iron Bug   Цитата(Алексей1153 @ 6.10.2010, 17:03) ну...   6.10.2010, 14:30
- - Алексей1153   Цитата(Iron Bug @ 6.10.2010, 17:30) STL н...   6.10.2010, 14:37
- - Iron Bug   Нашла кое-какие опенсорцные STL библиотеки: http:/...   6.10.2010, 14:46
- - Алексей1153   Цитата(Iron Bug @ 6.10.2010, 17:46) а вых...   6.10.2010, 14:48
- - kwisp   Iron Bug, есть еще реализация stl на сайте sgi и ...   6.10.2010, 14:53
- - Iron Bug   Цитата(Алексей1153 @ 6.10.2010, 17:48) да...   6.10.2010, 15:01
- - kwisp   Iron Bug, попробовал твой пример в linux - память...   6.10.2010, 15:26
- - Iron Bug   Цитата(kwisp @ 6.10.2010, 18:26) попробов...   6.10.2010, 15:35
- - kwisp   Цитата(Iron Bug @ 6.10.2010, 16:35) я пиш...   6.10.2010, 15:41
- - Iron Bug   Цитата(kwisp @ 6.10.2010, 18:41) ну тут к...   6.10.2010, 15:45
- - Алексей1153   Цитата(kwisp @ 6.10.2010, 18:26) конечно ...   6.10.2010, 18:27
- - Iron Bug   дебаг значения не имеет. масштаб мельче. смотри ме...   6.10.2010, 22:16
|- - AD   Цитата(Iron Bug @ 6.10.2010, 23:16) собст...   7.10.2010, 7:59
- - Алексей1153   Цитата(Iron Bug @ 7.10.2010, 1:16) и ещё ...   6.10.2010, 22:34
- - Iron Bug   я пока не утверждала, что опенсорцный STL эффектив...   7.10.2010, 8:40
|- - AD   Блин. Где собрать? Как подключить? Внешне отличать...   7.10.2010, 8:42
- - Iron Bug   Цитата(AD @ 7.10.2010, 11:42) Блин. Где с...   7.10.2010, 9:52
- - Iron Bug   Ура! Я собрала STLport с бустом под студией 20...   7.10.2010, 13:15
- - Iron Bug   Чуть поторопилась я с вариантом сборки STLport c б...   7.10.2010, 15:52
- - Iron Bug   В общем, под вендой у меня всё заработало. Есть не...   8.10.2010, 9:50
- - Iron Bug   Аццкая жесть или как под вендой заставить STLport ...   11.10.2010, 13:21


Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


4 чел. читают эту тему (гостей: 4, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 30.1.2025, 0:55