Войти
Nebula CommunityСтатьи

Разбор кода Nebula Device2. Часть1. Класс строки (статья 2 - общие операции)

Автор:

Операции вставки и получения строк из объектов класса nString


Начало тут.

Строки в движке небулы представлены классом nString, который находится в файле nstring.h. Довольно большой класс.
Строки класса nString содержат внутри себя локальный буфер - обычный массив типа char внутри класса.
Строка, представленная объектом этого класса, может полностью содержаться в локальном буфере, если ее длина с учетом конечного нуля не превысит 14 символов. При этом не будет выделяться память операциями типа n_malloc или new. Если же нужно поместить в объект типа nString строку, в которой более чем 14 символов, то методы класса nString будут обращаться к операции динамического выделения памяти (n_malloc). n_malloc - это та же функция malloc из стандартной библиотеки C, но выполненная в виде макроса. Почему это важно знать - копирование строки в уже готовый массив производится намного быстрее, чем выделение памяти под строку и последующее ее копирование в выделенную память. Фактически полезное пространство в локальном буфере позволяет уместить там 13 символов, так как один символ в буфере пойдет на размещение нуля, который завершает строку.
Перехожу к рассмотрению методов.

Геттеры и сеттеры

Чтобы использовать строку класса движка Nebula Device2, нужно определить объект класса nString:

nString s;

При этом объект s не будет содержать никакого текстового значения. Чтобы поместить в объект строки что-нибудь полезное, можно воспользоваться методом Set:

void Set(const char* str, int length);
Передайте в первом параметре указатель на строку с текстом, а вторым параметром - длину строки, копируемой в объект класса nString. При этом необязательно, чтобы копируемая строка оканчивалась нулем. Важно, чтобы в строке str было не менее length символов. То есть можно скопировать и часть строки.

В другом методе с таким же именем Set можно передавать строки, оканчивающиеся нулем, не передавая длины этой строки:

void Set(const char* str);

Для того, чтобы из объекта типа nString получить обычную С-строку, нужно использовать метод Get:

const char* Get() const;

Пример:

+ Показать

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

Путь к заголовочным файлам:

"Ваш диск:\Ваша папка\nebuladevice-code-3307-trunk\nebula2\code\nebula2\inc"

Путь к статическим либам:

"Ваш диск:\Ваша папка\nebuladevice-code-3307-trunk\nebula2\build\vstudio8\inter\win32d"

В свойствах компоновщика (Св-ва конфигурации >> Компоновщик >> Ввод) укажите дополнительные зависимости:

#Nebula device, #класс строк

2 февраля 2016