Veso : Преди време (6-7 год.) имаше една статия в Dr. Dobb's за самоописателни файлове, в хедъра на които се записваше структурата на самия файл. Не съм много сигурен, но предполагам, че можеше да се записват и двоични данни в този самоописателен файл. Ако проявяваш интерес бих могъл да ти я сканирам.
Благодаря, мисля че се сещам за какво става дума. Играл съм си с лоудери за Куейк 2 модели :). Структура(хедър) в началото на двоичен файл, с полета даващи информация, какво съдържа файла, оффсета от началото, какъв е размера на блока и т.н.
Veso : Идеята ми, която грубо казано се базира на тази статия, беше да разделиш структурата на БД от самите данни. Т.е. да се напише клас, който прочитайки структурата на БД (DDL) ще знае какви данни има за да се обработват по подходящият начин (DML).
Вече го направих с масив от войд указатели.Грозно е но работи икономично и не се налага да заделям динамично памет, или да 'пресипвам' данни от едно място на друго.
Най-общо казано, работи с масив от void* към всяко поле , който всъщност представлява записа.
Има и една статична описателна структура , която съдържа масиви за размера на всяко поле в записа, за имената на полетата , броя полета в таблицата, типа и други.Когато се чете запис например, юзера подава адреса на един празен'запис' на базата, празните указатели от масива се подават след необходимото отместване на fread с информация за размера на полетата.След това юзера си каства указателите от върнатия запис(масив) до типа в описателната структура съответстващ на индекса, (или на своя отговорност :)) и прибира данните.Мислих някакви класове, серилизации, потоци, но това ми се стори доста по-елеметарно и икономично, особено за това за което ми трябва.
Veso : Още едно възможно решение: структура/клас съдържащ Variant array - VarArray в СБуилдера, ако още пишеш на него.
Да, на Билдер-а съм(много помниш :)), но гледам да се придържам към стандартния С++, за да не бера ядове, после когато тръгна да портвам нещо за GCC или VC.
Радо : Както си го описал, направо плаче за sqlite. Ти си знаеш де :)
Мда, прав си , мен все ме е страх да не направя някой overkill. Но май ще взема да го попрегледам. Най малкото може да видя как се нещата.
|