00001 #ifndef ioobj_h
00002 #define ioobj_h
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016 #include "conn.h"
00017 #include "multiid.h"
00018 #include "namedobj.h"
00019 class IOPar;
00020 class CallBack;
00021 class ascistream;
00022 class ascostream;
00023 class Translator;
00024 class IOLink;
00025
00026
00027
00028
00029 mClass IOObjProducer
00030 {
00031 public:
00032
00033 virtual bool canMake(const char*) const = 0;
00034 virtual IOObj* make(const char*,const MultiID&,
00035 bool fill_defs) const = 0;
00036
00037 };
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049
00050
00051
00052
00053
00054
00055
00056
00057
00058 mClass IOObj : public NamedObject
00059 {
00060 public:
00061
00062 IOObj* clone() const;
00063 IOObj* getParent() const;
00065 virtual const MultiID& key() const { return key_; }
00066
00067 virtual ~IOObj();
00068 virtual bool bad() const = 0;
00069 virtual bool isLink() const { return false; }
00070 virtual void copyFrom(const IOObj*) = 0;
00071 virtual bool hasConnType( const char* s ) const
00072 { return s && !strcmp(s,connType()); }
00073
00074 virtual const char* connType() const = 0;
00075 virtual Conn* getConn(Conn::State) const = 0;
00076 virtual bool slowOpen() const { return false; }
00077
00078 virtual const MultiID& parentKey() const = 0;
00079 virtual void setParentKey(const char*) = 0;
00080 virtual const char* translator() const = 0;
00081 virtual void setTranslator(const char*) = 0;
00082 virtual const char* group() const = 0;
00083 virtual void setGroup(const char*) = 0;
00084 virtual const char* fullUserExpr(bool forread) const= 0;
00085
00086 virtual bool implExists(bool forread) const = 0;
00087 virtual bool implReadOnly() const { return true; }
00088 virtual bool implRemove() const { return false; }
00089 virtual bool implShouldRemove() const { return true; }
00090 virtual bool implRename(const char*,const CallBack* cb=0)
00091 { return false; }
00092 virtual bool implSetReadOnly(bool) const { return false; }
00093 virtual bool removeQuery() const { return false; }
00094 virtual void genDefaultImpl() {}
00095
00096 virtual const char* dirName() const;
00099 bool isStandAlone() const { return dirname_ ? true : false; }
00101 void setStandAlone(const char* dirnm);
00103 virtual IOPar& pars() const { return pars_; }
00105
00106 static bool isKey(const char*);
00108 static bool isSurveyDefault(const MultiID&);
00110
00111 Translator* getTranslator() const;
00114 virtual void acquireNewKey();
00116
00117 static const int tmpID() { return 999999; }
00118 inline bool isTmp() const { return key_.leafID() == tmpID(); }
00119 bool isReadDefault() const;
00120
00121 static int addProducer(IOObjProducer*);
00123
00124 protected:
00125
00126 FileNameString* dirname_;
00127 IOLink* mylink_;
00128 MultiID key_;
00129
00130 IOObj(const char* nm=0,const char* ky=0);
00131 IOObj(IOObj*,const char* ky=0);
00132 static IOObj* get(ascistream&,const char*,const char*);
00133 bool put(ascostream&) const;
00134 virtual bool getFrom(ascistream&) = 0;
00135 virtual bool putTo(ascostream&) const = 0;
00136 void setKey( const char* nm ) { key_ = nm; }
00137
00138 private:
00139
00140 friend class IODir;
00141 friend class IOLink;
00142
00143 IOPar& pars_;
00144 int myKey() const;
00145
00146 static IOObj* produce(const char*,const char* nm=0,const char* ky=0,
00147 bool initdefaults=true);
00148
00149 };
00150
00151 mGlobal bool equalIOObj(const MultiID&,const MultiID&);
00152 mGlobal bool areEqual(const IOObj*,const IOObj*);
00153 mGlobal bool fullImplRemove(const IOObj&);
00154
00155 #endif