00001 #ifndef __ARCHIVE_H__ 00002 #define __ARCHIVE_H__ 00003 00004 #include <magic/mobject.h> 00005 #include <magic/mstring.h> 00006 #include <magic/mstream.h> 00007 00008 /* 00010 // 00011 // CArchive 00012 // 00013 00014 enum { ARC_LOAD=0, ARC_SAVE=1, ARC_RECORD=2, 00015 ARC_BINARY=0, ARC_TEXT=16, ARC_FORMATTED=32, 00016 ARC_VERINFO=64, 00017 ARC_ADDRESSES=128}; 00018 00019 // CArchive toteuttaa geneerisen objektien tallennuksen tiedostoon. 00020 class CArchive { 00021 filebuf fbuf; 00022 ostream* out; 00023 istream* in; 00024 String arcfile; // Tiedoston nimi 00025 int mode; // Tallennusmoodi 00026 String nextname; // Seuraavan objektin nimi 00027 int indent; // Sisennystaso 00028 Array<String>* attribs; // Muistiinpannut attribuutit 00029 00030 int open (const char* filename, int flag); 00031 public: 00032 00033 friend CArchive& operator<< (CArchive& out, const Object& obj); 00034 friend CArchive& operator>> (CArchive& in, Object& obj); 00035 int errst; 00036 00037 CArchive () {in=NULL; out=NULL; errst=0; indent=0; mode=0; attribs=NULL;} 00038 // Luo halutun nimisen archiven annetulla moodilla 00039 // (katso <I>liput</I> alla) 00040 CArchive (const char* filnam, int md); 00041 ~CArchive (); 00042 00043 // Avaa arkiston tallennusta varten, palauttaa FALSE, jos 00044 // virhetilanne 00045 int opensave (const char* filename = NULL); 00046 00047 // Avaa arkiston latausta varten, palauttaa FALSE, jos 00048 // virhetilanne 00049 int openload (const char* filename = NULL); 00050 00051 int openrecord (); 00052 00053 void close (); 00054 00055 // Asettaa tekstiarkiston seuraavan objektin nimen 00056 CArchive& name (const char* nam) {nextname=nam; return *this;} 00057 // Kirjoittaa 00058 CArchive& operator<< (int i); 00059 CArchive& operator<< (long i); 00060 CArchive& operator<< (char i); 00061 CArchive& operator<< (float i); 00062 CArchive& operator<< (double i); 00063 // CArchive& operator<< (const char* i) {if (out) out->write (i, strlen(i)); return *this;} 00064 00065 // Kirjoittaa muistipuskurin sellaisenaan. 00066 // Tekstimuototilassa se heksakoodataan 00067 CArchive& write (const char* p, int n); 00068 00069 // Lukee kokonaisluvun (todellisuudessa pitkän) 00070 CArchive& operator>> (int& i) {long i2=i; operator>> (i2); i=i2; return *this;} 00071 // Lukee pitkän kokonaisluvun 00072 CArchive& operator>> (long& i); 00073 // Lukee yksittäisen merkin 00074 CArchive& operator>> (char& i); 00075 // Lukee liukuluvun (todellisuudessa pitkän) 00076 CArchive& operator>> (float& i) {double i2=i; operator>> (i2); i=i2; return *this;} 00077 // Lukee pitkän liukuluvun 00078 CArchive& operator>> (double& i); 00079 // CArchive& operator>> (char* p) {if (in) in->read (p, n); return *this;} 00080 // Lukee muistipuskurin 00081 CArchive& read (char* p, int n); 00082 00083 const Array<String>& getattribs () const {return *attribs;} 00084 }; 00085 00086 00087 //- <H3>Liput</H3> 00088 //- <TABLE> 00089 //- <TR><TD><B> ARC_LOAD <TD> Ladataan (oletus) 00090 //- <TR><TD><B> ARC_SAVE <TD> Tallennetaan 00091 //- <TR><TD><B> ARC_RECORD <TD> Laitetaan attribuuttien nimet vain muistiin 00092 //- <TR><TD><B> ARC_BINARY <TD> Binäärimuotoinen arkisto (oletus) 00093 //- <TR><TD><B> ARC_TEXT <TD> Tekstimuotoinen arkisto 00094 //- <TR><TD><B> ARC_FORMATTED <TD> Objektihierarkian mukaan muotoiltu arkisto 00095 //- <TR><TD><B> ARC_VERINFO <TD> Tallennetaanko alkuun versiotieto 00096 //- <TR><TD><B> ARC_ADDRESSES <TD> Tallennetaanko muotoillussa muodossa 00097 //- mukaan objektien osoitteet 00098 //- </TABLE><P> 00099 //- Näitä voi yhdistellä binäärisellä | - operaatiolla 00100 00101 // Sokerointioperaatio name()-liitteen tekemiseksi luokan attribuutteihin 00102 CArchive& operator<< (CArchive& out, const char* str); 00103 00104 */ 00105 00106 #endif