// // Модуль: заголовочный файл для процедур работы с буферами памяти // #ifndef __BUFFER_H__ #define __BUFFER_H__ #define BF_DEF_DATA 0xFF // данные заполнения буфера по умолчанию #define BF_ERR_SUCCESS 0x00000000L // все закончилось успешно #define BF_ERR_OVF 0xFF0001FFL // выход адреса за пределы буфера #define BF_ERR_DATA 0xFF0002FFL // ошибка работы с данными // уже присутствуют или отсутствуют #define BF_ERR_NOMORE 0xFFFFFFFFL // больше нет данных в буфере typedef struct _BUF { // // Сейчас предполагается однопоточная модель, при многопоточной // модели в эту структуру можно добавить объекты синхронизации // DWORD Size; // размер буфера в байтах PBYTE Map; // указатель на карту буфера DWORD MapSize; // размер карты буфера в байтах BYTE Data[1]; // собственно данные буфера } BUF, *PBUF; // // Функция очистки карты буфера и заполнения области данныз // моделью по умолчанию // void BF_Clear(PBUF Buf); // // Функция создает буфер указанного размера (в байтах), // при этом буфер заполняется моделью по умолчанию, карта // буфера обнуляется. // PBUF BF_Create(DWORD Size); // // Функция удаления созданного буфера и освобождения всех // связанных с буфером ресурсов // void BF_Close(PBUF Buf); // // Функция безусловной записи данных в буфер без проверки // признака наличия данных по адресу приемника. После // проведения записи безусловно устанавливаются признаки // наличия данных. // DWORD BF_WriteArray(PBUF Buf, DWORD Dst, PBYTE DataW, DWORD Count); // // Функция безусловного считывания данных из буфера без проверки // признака наличия данных по адресу источника. // DWORD BF_ReadArray(PBUF Buf, DWORD Src, PBYTE DataR, DWORD Count); // // Функция записи данных в буфер с проверкой признака наличия данных // по адресу приемника. Если обнаружены данные, то функция возвращает // ошибку. После проведения записи безусловно устанавливаются признаки // наличия данных. // DWORD BF_InsertArray(PBUF Buf, DWORD Dst, PBYTE DataW, DWORD Count); // // Функция безусловного считывания байта из буфера без проверки // признака наличия данных по адресу источника. // DWORD BF_ReadByte(PBUF Buf, DWORD Begin); // // Функция поиска записанного байта в буфере. Поиск байта ведется по // по признаку наличия данных, начиная с указанного адреса. Если более // байтов не обнаружено, то возвращается 0xFFFFFFFF, иначе возвращается // смещение найденного байта в буфере // DWORD BF_NextByte(PBUF Buf, DWORD Begin); // // Функция безусловной записи байта в буфер без проверки // признака наличия данных по адресу приемника // DWORD BF_WriteByte(PBUF Buf, DWORD Begin, BYTE Data); // // Функция проверки наличия байта в буфере по указанному индексу // DWORD BF_TestByte(PBUF Buf, DWORD Begin); // // Получение размера буфера в байтах // #define BF_GetSize(Buf) ((Buf)->Size) #endif __BUFFER_H__