C3D Kernel  104065
Открытые члены | Защищенные члены | Защищенные данные | Друзья

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

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

Полный список членов класса

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

 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)
 Дать количество элементов массива.
size_t Count () const
Clusteroperator[] (size_t loc) const
 Оператор доступа по индексу.
void ReserveFiles (size_t n, bool addAdditionalSpace)
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)
 Присоединить файл к буферу с проверкой или без.
virtual bool open (FileSpace &file, uint8 om, const VersionContainer &, bool fullCheck=true)
bool openSys (uint8 om)
 Открыть системный файл.
virtual void close ()
 Закрыть файл.
virtual void closeBuff ()
 Закрыть буфер.
virtual FileSpaceenterFileSpace (uint8)
virtual FileSpaceenterFileSpace (ClusterReference &, bool)
virtual FileSpaceenterFileSpace (ClusterReference &, FileSpace *, bool)
virtual FileSpacereturnToPreviousFileSpace ()
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)
 Установить режим работы буфера.
void setMode (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)
 Установить версию формата.
 OBVIOUS_PRIVATE_COPY (iobuf_Seq)

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

int underflow ()
 Вызывается когда прочитан весь буфер, а еще хочется.
int overflow (uint8 ch)
 Вызывается когда заполнен весь буфер, а еще хочется.
virtual int setup ()=0
 Установить следующий буфер.
virtual int flush ()=0
 Сбросить буфер.
void checkEof ()
 Установить конец файла, если необходимо.
size_t avail () const
 Узнать количество необработанных байт в буфере.
size_t waiting () const
 Узнать количество обработанных байт в буфере.
bool mine (FileSpace &)
 Проверить, мой ли это файл.
void SetVersionsContainer (const VersionContainer &vers)
 Установить версию открытого файла.
VERSION SetStorageVersion (VERSION)
 Установить версию хранилища.

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

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
 Свежий ли буфер.

Друзья

class tape

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

Потоковый буфер - базовый класс.

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

Терминология:

Класс iobuf_Seq содержит массив кластеров.

Класс Кластер (Cluster) - это структурированная информация о кластере (его начало и длина). Он используется для операций с диском, где тогда начало - это смещение, и операций с памятью, где начало - это адрес в памяти. Все операции чтения и записи производятся по-кластерно, используя индекс в массиве кластеров iobuf_Seq.

Класс Файловое пространство (FileSpace) - это место, отведенное под файл, это массив индексов в массиве кластеров. Это как раз то, что здесь мы называем файлом.

Внимание: с этого места и далее вместо слова кластер следует читать - индекс кластера в массиве кластеров iobuf_Seq.


Важнейшие поля данных iobuf_Seq:

FileSpace sys - "системный" файл. Он открывается в конструктор класса tape.
1. Если класс iobuf_Seq используется классом tape непосредственно (например: writer potok( "file.ext" ); или reader * potok = new reader( "file.ext" ), то в файле sys содержится непосредственно информация, которая записывалась в file.ext.
2. Если класс iobuf_Seq используется классом Catalog, то в sys хранится структура каталогов и файлов внутри Catalog (он зачитывается в конструкторе класса Catalog).

PArray<FileSpace> files - список файлов содержащихся в iobuf_Seq. Первым эл-том в нем всегда лежит адрес sys. При записи Catalog содержимое files записывается в sys, исключая, естественно, первый элемент.

uint32 stateFlag - состояние буфера. Предполагается, что все операции чтения-записи устанавливают этот флаг когда надо и проверяют его состояние перед реальным выполнением. С этим флагом работают следующие функции: iobuf_Seq::good, iobuf_Seq::eof, iobuf_Seq::state, iobuf_Seq::setState, iobuf_Seq::clearState; tape::good, tape::eof, tape::state; Catalog::good, Catalog::goodeof, Catalog::goodstate.

VERSION storageVers - версия хранилища.
VERSION curFileVers - версия текущего открытого файла (потока).
В общем случае версия хранилища и версия любого файла в нем могут не совпадать.

uint8 bufferMode - Режим, в котором может работать буфер.
uint8 curFileMode - Режим открытия текущего файла.
В общем случае режим хранилища и режим открытого файла в нем могут не совпадать. Ограничение - если режим буфера io::in, то попытка открыть файл на запись (io::out) не приводит к открытию.

uint8 * base - Указатель на начало буфера в памяти.
uint8 * ptr - Указатель на след символ в памяти.
uint8 * end - Указатель на конец буфера в памяти.
При работе с диском указатели устанавливаются на фиксированный участок памяти, куда подгружаются участки файла при чтении. При работе с памятью membuf устанавливает их на выделенную под кластер память.


Важнейшие функции iobuf_Seq:
Функция setup() - установить в buffer(переменные base,ptr,end) следующий кластер. Вызывается из функций overflow (при записи) и underflow (при чтении), когда заканчивается очередной буфер. Они в свою очередь вызываются из функций чтения-записи символов из потока (gc(), getn(), getln(), pc(), putn(), putln()).

Функция flush() - сбросить буфер. Вызывается перед подъемом следующего кластера. При чтении ничего не делает. При записи, при работе с диском, сохраняет предыдущий кластер на диск, а при работе с памятью запоминает размер последнего заполненного кластера.

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


Методы

void iobuf_Seq::Reserve ( size_t  n,
bool  addAdditionalSpace = true 
)

Обнулить количество элементов.

Cluster& iobuf_Seq::operator[] ( size_t  loc) const

Зарезервировать место под заданное количество файлов.

int iobuf_Seq::pc ( uint8  c)

Поместить байт в буфер.

virtual bool iobuf_Seq::open ( FileSpace file,
uint8  om,
const VersionContainer ,
bool  fullCheck = true 
) [virtual]

Открыть файл, если он свой. Флаг fullCheck == false отключает избыточные проверки (ради производительности).

Переопределяется в iobuf.

virtual FileSpace* iobuf_Seq::enterFileSpace ( uint8  ) [inline, virtual]

Установить для записи FileSpace с заданным индексом (при необходимости создать новый). Set FileSpace with given index for writing (create if necessary).

Переопределяется в membuf.

virtual FileSpace* iobuf_Seq::enterFileSpace ( ClusterReference ,
bool   
) [inline, virtual]

Установить позицию для записи/чтения по заданному ClusterReference. Сохранить предыдущую позицию, если saveCurr = true.

Переопределяется в membuf.

virtual FileSpace* iobuf_Seq::enterFileSpace ( ClusterReference ,
FileSpace ,
bool   
) [inline, virtual]

Установить позицию для записи/чтения по заданным FileSpace и ClusterReference. Внимание, здесь ClusterReference.clusterIndex должен содержать индекс в массиве индексов кластеров в FileSpace! Сохранить предыдущую позицию, если saveCurr = true.

Переопределяется в membuf.

virtual FileSpace* iobuf_Seq::returnToPreviousFileSpace ( ) [inline, virtual]

Установить предыдущий FileSpace для записи/чтения. Set previous FileSpace for writing/reading.

Переопределяется в membuf.


Объявления и описания членов класса находятся в файле:
 Указатель Классы Пространства имен Файлы Функции Переменные Определения типов Перечисления Элементы перечислений Друзья Макросы