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