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
1.2.6 written by Dimitri van Heesch,
© 1997-2001