C3D Toolkit  Kernel - 105122, Vision - 0.181114.105122

Потоковый буфер памяти. Подробнее...

Граф наследования:membuf:
[см. легенду]
Граф связей класса membuf:
[см. легенду]

Классы

struct  FileStackEntry
 Стек FileSpaces. Подробнее...
 

Открытые члены

 membuf ()
 Конструктор.
 
virtual ~membuf ()
 Деструктор.
 
bool isEmpty () const
 Буфер пуст?
 
size_t toMemory (const char *&memory, size_t addSize=0) const
 Записать в непрерывную память. Функция подразумевает вполне определенное толкование значений входных данных, поэтому она не должна вызываться с неинициализированными аргументами. Подробнее...
 
bool fromMemory (const char *memory)
 Прочитать из непрерывной памяти.
 
size_t getMemLen () const
 Вычислить необходимую длину непрерывного куска памяти для буфера.
 
readerread (reader &in)
 Подготовить поток чтения.
 
writerwrite (writer &out) const
 Подготовить поток записи.
 
void clean ()
 Очистить буфер. Подробнее...
 
virtual void closeBuff ()
 Закрыть буфер.
 
- Открытые члены унаследованные от iobuf
 iobuf (uint16 clusterSize)
 Конструктор
 
virtual ~iobuf ()
 Деструктор.
 
virtual bool open (FileSpace &file, uint8 om, const VersionContainer &, bool fullCheck=true)
 Открыть файл, если он свой. Флаг fullCheck == false отключает избыточные проверки (ради производительности).
 
bool del (FileSpace &file)
 Освободить место, занимаемое файлом.
 
bool truncate (FileSpace &file, size_t from)
 Урезать файл. Подробнее...
 
bool speedOnClose () const
 Нужно ли упорядочивать при закрытии.
 
void speedOnClose (bool s)
 Установить флаг необходимости упорядочивания при закрытии.
 
virtual void free (size_t c)
 Освободить кластер.
 
- Открытые члены унаследованные от iobuf_Seq
 iobuf_Seq (uint16 clusterSize)
 Конструктор
 
virtual ~iobuf_Seq ()
 Деструктор.
 
void Reserve (size_t n, bool addAdditionalSpace=true)
 < Зарезервировать место под заданное количество элементов. Подробнее...
 
void Flush ()
 Освободить всю память.
 
void HardFlush ()
 Удалить лишнюю память.
 
void Adjust ()
 Добавить элемент в конец массива.
 
ClusterAdd ()
 Добавить данный элемент в конец массива.
 
ClusterAdd (const Cluster &e)
 Дать количество элементов массива.
 
Clusteroperator[] (size_t loc) const
 Оператор доступа по индексу. Подробнее...
 
int gc ()
 Получить следующий байт из буфера.
 
size_t getn (void *, size_t)
 Получить следующие n байт из буфера поэлементно.
 
size_t getln (void *, size_t)
 Получить следующие n байт из буфера копированием участка памяти.
 
int pc (uint8 c)
 Получить очередной байт из буфера, но указатель на следующий не сдвигать. Подробнее...
 
size_t putn (const void *, size_t)
 Поместить следующие n байт в буфер поэлементно
 
size_t putln (const void *, size_t)
 Поместить следующие n байт в буфер копированием участка памяти.
 
void advance ()
 Если кончился текущий буфер, переместить указатель на следующий.
 
bool good () const
 Корректно ли состояние буфера.
 
bool eof () const
 Достигнут ли конец файла?
 
uint32 state () const
 Получить состояние буфера.
 
void setState (io::state add)
 Добавить состояние буфера.
 
void clearState (io::state sub)
 Убрать состояние буфера.
 
io::pos size () const
 Посчитать размер текущего файла.
 
io::pos tell () const
 Возвращает текущую позицию в файле
 
void lseek (size_t pos=SYS_MAX_T)
 Установить текущую позицию в буфере
 
bool attach (FileSpace &file, bool check=true)
 Присоединить файл к буферу с проверкой или без.
 
bool openSys (uint8 om)
 Открыть системный файл.
 
virtual void close ()
 Закрыть файл.
 
ClusterReference getCurrentClusterPos ()
 Получить текущую позицию в буфере.
 
FileSpacesysFile ()
 Получить доступ к системному файлу.
 
FileSpaceopenedFile () const
 Получить доступ к открытому файлу.
 
virtual size_t DOSFileLen () const
 Размер данных хранилища (файла на диске).
 
virtual const TCHAR * DOSFileName () const
 Имя хранилища (файла на диске).
 
bool fresh () const
 Свежий ли буфер?
 
void fresh (bool f)
 Установить состояние свежести буфера.
 
bool modified () const
 Модифицирован ли буфер?
 
void modified (bool m)
 Установить состояние модифицированности буфера.
 
uint8 mode () const
 Узнать режим работы буфера.
 
void mode (uint8 m)
 Установить режим работы буфера.
 
bool IsInMode () const
 Находимся в режиме чтения?
 
bool IsOutMode () const
 Находимся в режиме записи?
 
bool IsInOrOutMode () const
 Находимся в режиме чтения или записи?
 
bool deleteIfEmpty () const
 Нужно ли удалять пустой файл?
 
void deleteIfEmpty (bool s)
 Установить флаг необходимости удаления пустого файла.
 
bool deleteOnClose () const
 Нужно ли удалять файл при закрытии буфера?
 
void deleteOnClose (bool s)
 Установить флаг необходимости удаления файла при закрытии буфера.
 
void SetVersionsByStorage ()
 Установить текущую версию равной версии хранилища.
 
VERSION MathVersion () const
 Вернуть главную версию (математического ядра).
 
VERSION AppVersion (size_t ind=-1) const
 Вернуть дополнительную версию (конечного приложения).
 
const VersionContainerGetVersionsContainer () const
 Получить версии буфера.
 
VERSION GetStorageVersion ()
 Узнать версию хранилища.
 
VERSION GetFormatVersion () const
 Узнать версию формата.
 
void SetFormatVersion (VERSION version)
 Установить версию формата.
 

Защищенные члены

virtual int setup ()
 Установить буфер для следующего кластера.
 
virtual int flush ()
 Cбросить буфер.
 
void PrepareToRead (const VersionContainer &vers)
 Инициировать все поля перед чтением.
 
virtual FileSpaceenterFileSpace (uint8 level)
 Установить новый FileSpace для записи объекта уровня level.
 
virtual FileSpaceenterFileSpace (const ClusterReference &ref, bool updateStack)
 Установить позицию для записи/чтения по заданному ClusterReference. Сохранить предыдущую позицию в стеке File Spaces, если updateStack = true.
 
virtual FileSpaceenterFileSpace (const ClusterReference &ref, FileSpace *file, bool updateStacke)
 Установить позицию для записи/чтения по заданным FileSpace и ClusterReference. Внимание, в данном случае ClusterReference.clusterIndex указывает на индекс в массиве индексов кластеров в FileSpace! Сохранить предыдущую позицию в стеке File Spaces, если updateStack = true.
 
virtual FileSpacereturnToPreviousFileSpace ()
 Извлечь предыдущий FileSpace из стека и установить его для записи/чтения.
 
- Защищенные члены унаследованные от iobuf_Seq
int underflow ()
 Вызывается когда прочитан весь буфер, а еще хочется.
 
int overflow (uint8 ch)
 Вызывается когда заполнен весь буфер, а еще хочется.
 
void checkEof ()
 Установить конец файла, если необходимо.
 
size_t avail () const
 Узнать количество необработанных байт в буфере.
 
size_t waiting () const
 Узнать количество обработанных байт в буфере.
 
bool mine (FileSpace &)
 Проверить, мой ли это файл.
 
void SetVersionsContainer (const VersionContainer &vers)
 Установить версию открытого файла.
 
VERSION SetStorageVersion (VERSION)
 Установить версию хранилища.
 

Защищенные данные

size_t maxRegCount
 Максимальное количество регистрируемых объектов.
 
std::vector< FileSpace * > filesPool
 Вектор filesPool хранит все используемые FileSpaces ,кроме sys, который определен в iobuf_Seq. При использовании расширенного формата объекты каждого уровня записываются в отдельный FileSpace. При этом индекс FileSpace в векторе соответствует уровню объекта в модели.
 
std::map< size_t, std::pair< FileSpace *, size_t > > fileClusterIndexCache
 Кэш для данных о кластерах в FileSpace. map: индекс кластера в массиве кластеров iobuf_Seq -> данные FileSpace (указатель на FileSpace и индекс в массиве индексов кластеров).
 
- Защищенные данные унаследованные от iobuf
FileSpace freed
 Список освобожденных кластеров.
 
- Защищенные данные унаследованные от iobuf_Seq
uint8 * base
 Указатель на начало буфера.
 
uint8 * ptr
 Указатель на следующий байт.
 
uint8 * end
 Указатель на конец буфера.
 
VERSION storageVers
 Версия хранилища (должна быть ранее curFileVers).
 
VersionContainer curFileVers
 Версии текущего открытого файла (потока).
 
VERSION formatVersion
 Версия формата.
 
FileSpace sys
 Системный файл.
 
PArray< FileSpacefiles
 Список файлов содержащихся в iobuf_Seq (первый элемент - адрес sys).
 
FileSpacecurr
 Текущий открытый файл (поток).
 
size_t part
 Текущий кластер в текущем открытом файле.
 
uint16 clusterSize
 Размер кластера.
 
uint8 bufferMode
 Режим работы буфера.
 
uint8 curFileMode
 Режим открытия текущего файла.
 
bool modifiedFlag
 Буфер модифицирован.
 
bool freshFlag
 Свежий ли буфер.
 

Друзья

readeroperator>> (reader &in, membuf *&ptr)
 Оператор чтения.
 
readeroperator>> (reader &in, membuf &ref)
 Оператор чтения.
 
writeroperator<< (writer &out, const membuf *ptr)
 Оператор записи.
 
writeroperator<< (writer &out, const membuf &ref)
 Оператор записи.
 

Подробное описание

Потоковый буфер памяти.

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

Методы

◆ toMemory()

size_t membuf::toMemory ( const char *&  memory,
size_t  addSize = 0 
) const

Записать в непрерывную память. Функция подразумевает вполне определенное толкование значений входных данных, поэтому она не должна вызываться с неинициализированными аргументами.

Аргументы
[in,out]memory- память, куда писать. Если memory == NULL, то память выделяется.
[in]addSize- размер памяти, которую надо дополнительно выделить при выделении памяти. Смысл addSize зависит от начального значения параметра memory: если memory != 0 (т.е.память уже распределена), то addSize должен быть равен размеру памяти (addSize >= getMemLen() !!!). если memory == 0, то addSize определяет, столько байт дополнительно добавить (обнулив) в начале при выделении памяти.

◆ clean()

void membuf::clean ( )

Очистить буфер.

Закрыть буфер.


Объявления и описания членов класса находятся в файле: