|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
Класс редактирования данных. Нужны советы по реализации
Есть задача: написать класс, позволяющий редактировать данные в памяти. Указатель на данные и их начальный размер передаются в конструктор. Редактирование, на первый взгляд, тривиальное и реализуется тремя методами класса:
Код:
void Change(unsigned long StartByte, const void *NewData, unsigned long DataSize); void Delete(unsigned long StartByte, unsigned long Size); void Insert(unsigned long StartByte, const void *Data, unsigned long DataSize); Представим, есть объект класса с переданным ему для редактирования блоком данных. Допустим, у нас произошел последовательный вызов таких методов: Код:
Insert(5, MyData, 10); // Вставляем между 4-ым и 5-ым байтами 10 байтов MyData. Delete(7, 2); * * * * *// Удаляем 7-ой и 8-ой байты. Delete(4, 10); * * * * // Удаляем с 4-го по 13-ый байты. Код:
Delete(4, 2); Код:
unsigned long GetData(void *Buffer, unsigned long BufferSize); Ах, да! Чуть не забыл главное условие: никаких стандартных и, уж тем более, сторонних библиотек. Только "чистый" C++ и WinAPI. |
#2
|
|||
|
|||
Ну, можно и просто хранить список запросов, а потом их выполнять в момент запроса результата. Только вот не вижу тут выигрыша особого. Все-равно придется все операции сделать. Ну и проблемы могут быть с Insert. Т.е. ты записал операцию, сохранил там указатель на переданные данные, а потом вызывающий код эти данные удалил... или надо сначала их скопировать куда-то к себе. Тогда получается двойное копирование для этой операции. Сплошной проигрыш.
Выигрыш только тогда, когда ты можешь какие-то операции схлопнуть. Но это очень не тривиальная задача. Но если очень хочется,то создай специальный класс, например Код:
CMemOp { int op; int ops; int len; void * data; } |