Nebula CommunityСтатьи

Разбор кода Nebula Device2. Часть1. Класс строки (статья 1)

Автор:

Начинаю цикл небольших статеек, в которых буду описывать анализ кода небулы. Не гарантирую регулярность с написанием статей и своевременность ответов на комменты.

Я решил выкладывать ход разбора движка здесь, чтобы он не висел мертвым грузом на моем жестком диске и чтобы можно было найти и прочитать эти материалы позже.

Движок Nebula Device2 (ND2) можно скачать с сайта. Но я рекомендую качнуть снапшот кода главной ветки отсюда, так как там исправлены некоторые баги.
В небуле используются свои контейнеры, а не stl. Они располагаются в папке util директории с исходным кодом. Контейнеры в движке составляют значительную часть кода и для того, чтобы понять работу остальных подсистем, нужно с ними освоиться. Я начну разбор со строк.

Строки в движке представлены классом nstring.  Перед тем как разбираться с кодом класса надо понять работу некоторых строковых функций стандартной библиотеки C. Я писал код и компилировал его, используя среду Code::blocks 10.05.
Информацию по этим функциям можно найти в книге по Си Кернигана и Ритчи, на этом и этом сайтах.


Функция strpbrk

Прототип:

char* strpbrk (const char* s1, const char* s2);

Описание: возвращает указатель на  первый символ в строке s1, который совпал с любым из символов, входящих в строку s2, или 0, если совпадений не было найдено. Завершающие нулевые символы не учитываются при поиске.

Пример демо:

+ Показать

Я думаю с кодом примера все понятно. Можно посмотреть другой пример  и описание здесь.


Функция strtok

Прототип:

char * strtok(char* s1, const char* s2);

Описание: ищет в строке s1 лексему, состоящую из символов, которые не входят в строку s2. При первом вызове нужно передать через s1 строку, в которой нужно искать лексемы. Символы из строки s2 играют роль разделителей лексем. Если будет найдена лексема, то к ней автоматически будет добавлен завершающий 0. Далее чтобы найти следующие за первой оставшиеся лексемы, нужно передавать через s1 значение 0. При этом поиск будет производиться с конца лексемы, найденной в предыдущем вызове функции.
Набор символов-разделителей строки может варьироваться от одного вызова функции к другому. Функция возвращает найденную лексему или 0, если лексема не будет найдена.

Пример кода:

+ Показать


Функция strchr

Прототип:

char* strchr (const char* s, int c);

Описание: возвращает указатель на первое вхождение c в s или, если такового не оказалось, 0.

Пример кода:

+ Показать

Будет полезно пописать небольшие консольные приложения с применением этих и других строковых функций, а не просто читать этот текст.
Продолжение

#движок, #исходники

31 декабря 2015 (Обновление: 2 фев 2016)

Комментарии [5]