Справочное описание GLib | ||||
---|---|---|---|---|
#include <glib.h>
GStringChunk;
GStringChunk* g_string_chunk_new (gsize size);
gchar* g_string_chunk_insert (GStringChunk *chunk,
const gchar *string);
gchar* g_string_chunk_insert_const (GStringChunk *chunk,
const gchar *string);
gchar* g_string_chunk_insert_len (GStringChunk *chunk,
const gchar *string,
gssize len);
void g_string_chunk_free (GStringChunk *chunk);
Строковый блок используется для хранения групп строк. Память распределяется блоками и когда строки добавляются в GStringChunk они копируются в следующую свободную позицию в блоке. Когда блок заполняется распределяется следующий блок.
Когда сохраняется большое количество строк, строковые блоки более эффективны чем использование
g_strdup()
,
так как необходимо меньше вызовов
,
и при распределении тратится меньше памяти на накладные расходы.
malloc()
Добавление строк с помощью g_string_chunk_insert_const()
, также позволяет удалять дубликаты.
Для создания новой GStringChunk
используется g_string_chunk_new()
.
Для добавления строк в GStringChunk
используется g_string_chunk_insert()
.
Для добавления строк в GStringChunk,
но без дубликатов уже существующих строк в GStringChunk,
используется g_string_chunk_insert_const()
.
Для освобождения элементов GStringChunk
используется g_string_chunk_free()
.
Она не позволяет освобождать отдельные строки.
typedef struct _GStringChunk GStringChunk;
Непрозрачная структура данных представляющая строковый блок (String Chunks). Она должна использоваться только при помощи следующих функций.
GStringChunk* g_string_chunk_new (gsize size);
Создаёт новый GStringChunk.
size : |
размер по умолчанию блока памяти который распределён для хранения строк. Если определённая строка больше чем этот размер по умолчанию, то для неё будет распределён блок большего размера. |
Возвращает : | новый GStringChunk. |
gchar* g_string_chunk_insert (GStringChunk *chunk,
const gchar *string);
Добавляет копию string
в GStringChunk.
Возвращает указатель на новую копию строки в GStringChunk.
Символы в строке могут быть изменены, если необходимо, однако вы не должны изменять ничего после завершения строки.
В отличие g_string_chunk_insert_const()
,
эта функция не контролирует дубликаты.
А также строки добавленные с помощью g_string_chunk_insert()
не будут найдены с помощью g_string_chunk_insert_const()
при поиске дубликатов.
chunk : |
GStringChunk. |
string : |
строка для добавления. |
Возвращает : | указатель на копию string внутри
GStringChunk.
|
gchar* g_string_chunk_insert_const (GStringChunk *chunk,
const gchar *string);
Добавляет копию string
в GStringChunk, если такая же строка уже не добавлена в GStringChunk с помощью g_string_chunk_insert_const()
.
Эта функция полезна если вам нужно копировать большое количество строк но не нужно тратить пространство хранилища под дубликаты. Но вы должны помнить что здесь могут быть указатели на туже строку и поэтому любые изменения в строках должны выполняться очень осторожно.
Помните что g_string_chunk_insert_const()
не будет возвращать указатель на строку добавленную с помощью
g_string_chunk_insert()
,
даже если они соответствуют.
chunk : |
GStringChunk. |
string : |
строка для добавления. |
Возвращает : | указатель на новую или существующую копию string внутри
GStringChunk.
|
gchar* g_string_chunk_insert_len (GStringChunk *chunk,
const gchar *string,
gssize len);
Добавляет копию первых len
байт string
в GStringChunk.
Копия nul-завершённая.
Символы в строке могут изменяться, если необходимо, однако вы не должны делать никаких изменений после завершения строки.
chunk : |
GStringChunk |
string : |
байты для вставки |
len : |
количество байт string для вставки,
или -1 для вставки nul-завершённой строки.
|
Возвращает : | указатель на копию string внутри
GStringChunk
|
Начиная с версии 2.4
void g_string_chunk_free (GStringChunk *chunk);
Освобождает всю память распределённую GStringChunk.
После вызова g_string_chunk_free()
запрещается
доступ к любым строкам которые содержались внутри.
chunk : |
GStringChunk. |