#include #include #include "fstor.hpp" #define SMART_POINTERS // используем умные указатели #define NO_TEMPLATES // не используем шаблоны #include "oodbs.hpp" Dbs_Pointers_Declare( Record ); // определение "умных" указателей class Record : public File_Object { // каждый класс базы данных public: Record_Ptr Next; // должен быть выведен из File_Object char Text[ 1 ]; }; Dbs_Pointers_Define( Record ); // определение методов "умных" указателей Dbs_Channel DB_Vio ( 10 ) ; // создается пул каналов ввода/вывода Dbs_Pool DB_Cache ( 64 ) ; // создается пул страниц (размером 64 страницы) Dbs_File DB_File ( "test.dbs" ); // файл с которым работает база данных Dbs_F_Store DB_Store ( DB_File , DB_Cache ); // хранилище данного файла Dbs_Store* DB_List = &DB_Store; // список хранилищ исполззуемых базой данных Object_Database Db( 1, &DB_List ); // создание базы данных main () { Db.Open(); // открываем базы данных if( Db.Empty() ) { // если она пуста, то нужно создать корневой объект Record_Tie Rec; char Buf[ 256 ]; while( fgets( Buf, sizeof Buf, stdin ) ) { Record_Tie New = new (strlen(Buf)) Record; // создание новой записи if( !Nil(Rec) ) Rec->Next = New; strcpy( New->Text, Buf ); Rec = New; } if (!Nil(Rec)) { Rec->Next.Set_Nil(); } } else { // метод Start вернет виртуальный адрес корневого объекта for( Record_Ptr Rec = Record_Ptr::Root(); !Nil(Rec); Rec = Rec->Next ) fputs( Rec->Text, stdout ); } Db.Close(); // надо не забыть закрыть базы return 0; }