вторник, 27 июля 2010 г.

Знакомство с итараторами

Одна из важных тем при изучении C++ это тема итераторов. Чем лучше вы владеете ими, лучше и изящней будут вяглядеть ваш код. Нашел страничке, на которой автор пусть кратко,но не теряя в полноте пояснил всю логику использования итераторов.

Ссылка: http://www.hostmake.ru/articles/c/324/
Название: Итераторы библиотеки STL
Автор: Дмитрий Рамодин

Рекомендую к прочтению любому, кто осваивает язык

понедельник, 26 июля 2010 г.

Подмена dll зная CLSID КоСервера

Исследуя недавно Windows Messenger, задался вопросом: "а как внедрить в его адресное пространство процесса свою dll ?". Именно об этом эта заметка:

Значение параметра в ini-файле

В виду того,что иногда программистам хочется размять свой мозг и сделать какие-либо упражнения, то они начинают их искать :). Приведу пример подобной задачки и я.

Цель задачи: Написать реализацию функции, которая возвращает значение параметра в виде std::string.

Вот прототип итоговой функции и используемого ею типа итератора:

typedef std::string::iterator StrItr_t;
std::string ExtractValue(StrItr_t & p, std::string & s)

Значением считать:

1) Одну и более строк, с возможным выделением значения в ковычки;
2) Символом переноса на новую строку считать '\', находящийся в конце строки, до привычного нам '\n', т.е. байта 0x0A и предваренный пробелом или табуляцией;
3) Строка начатая ковычкой, при перенесении на новую строку не выделяется повторно в ковычки на новой перенесенной строке;
4) Символами коментария считать ';', '#' и только если значение не выделено в ковычки;
5) Если значение взято в ковычки и встретилось s.end() значит все что успели прочитать считать результатом;

В результат не попадают:

1) Ковычки, которые выделяют значение;
2) Символы коментариев;
3) Привычный нам символ новой строк '\n', т.е. байт равный значению 0x0A, который физически делит строки;
4) Символ переноса '\' на следующую строку;
5) Символ вертикальной табуляции '\t'.

пятница, 16 июля 2010 г.

Понимание устройства INI-файлов

Разрабатывая приложения,довольно часто сталкиваюсь с вопросом хранения настроек и конфигурирования работы приложения. Этот вопрос и стал причиной разработки класса по парсингу Ini-файла, пока мне хватает и на чтение.

При изучении строения ини-файла столкнулся с тем что каждая тулза работает по своему и четкого стандарта нет! Одни программисты привыкли к одним решениям, другие к другим.

Строение:
1) Могут иметься глобальные параметры, это параметры не принадлежащие какой-либо секции, т.е. описаны до первой секции
2) Секции определяются названием заключенным в квадратные скобки и их значением, состоящим из параметров и их значений
3) Параметры задаются именем и значением. Значение и имя разделяется символом '='
4) Значения могут быть очень большими и тогда очень удобно внедрить поддержку символа '\' означающего перенос на новую строку
5) Также для удобства сопровождения файлов существуют коментарии, как правило, это символы ';', '#'
6) Может возникнуть ситуация, когда символы относящиеся к специальным ';', '#', '\' нужно включить поддержку ковычек. Другими словами, если значение начинается с ковычек, то считать значением все пока не найдена закрывающая, т.е. самая последняя, после которой только пробелы, табуляци или конец строки, ну или пока не закончилась строка

Какие могут быть нюансы?

1) В файле могут быть две секции с одинаковыми названиями?
2) Стоит ли обрамлять в ковычки каждую новую перенесенную строку в ковычки?

Рекомендуемые ссылки:
1) ".ini"
2) "Cloanto Implementation of INI File Format"

понедельник, 12 июля 2010 г.

Создание заготовки распакованного файла

Заметка для тех кто по каким-либо причинам заинтересовался разработкой статических распаковщиков.