Разбор кода Nebula Device2. Часть1. Класс строки (статья 2 - общие операции)
Автор: graveman
Операции вставки и получения строк из объектов класса 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;
Пример: