MPQC  2.3.1
statein.h
1 //
2 // statein.h
3 //
4 // Copyright (C) 1998 Limit Point Systems, Inc.
5 //
6 // Author: Curtis Janssen <cljanss@limitpt.com>
7 // Maintainer: LPS
8 //
9 // This file is part of the SC Toolkit.
10 //
11 // The SC Toolkit is free software; you can redistribute it and/or modify
12 // it under the terms of the GNU Library General Public License as published by
13 // the Free Software Foundation; either version 2, or (at your option)
14 // any later version.
15 //
16 // The SC Toolkit is distributed in the hope that it will be useful,
17 // but WITHOUT ANY WARRANTY; without even the implied warranty of
18 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19 // GNU Library General Public License for more details.
20 //
21 // You should have received a copy of the GNU Library General Public License
22 // along with the SC Toolkit; see the file COPYING.LIB. If not, write to
23 // the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
24 //
25 // The U.S. Government is granted a limited license as per AL 91-7.
26 //
27 
28 #ifndef _util_state_statein_h
29 #define _util_state_statein_h
30 
31 #ifdef __GNUC__
32 #pragma interface
33 #endif
34 
35 #include <string>
36 #include <vector>
37 #include <map>
38 
39 #include <util/state/state.h>
40 #include <util/keyval/keyval.h>
41 
42 namespace sc {
43 
44 class StateInData {
45  public:
47  int size;
48  int type;
49  int offset;
50 
51  StateInData(): size(0), type(0), offset(0) {}
52 };
53 
55  public:
56  int version;
57  char *name;
58  const ClassDesc *classdesc;
59  int ninstance;
60  public:
61  StateClassData(int v=-1, const ClassDesc *c=0, char *name=0):
62  version(v), name(name), classdesc(c), ninstance(0) {}
63  StateClassData(const StateClassData &d) { operator=(d); }
64  ~StateClassData();
65  StateClassData &operator=(const StateClassData &d);
66 };
67 
70 class StateIn: public DescribedClass {
71  friend class SavableState;
72  friend class TranslateDataIn;
73  private:
74  // do not allow copy constructor or assignment
75  StateIn(const StateIn&);
76  void operator=(const StateIn&);
77  int have_cd_;
78  int dir_loc_;
79  char key_[KeyVal::MaxKeywordLength];
80  int keylength_;
81  protected:
82  Ref<KeyVal> override_;
83  TranslateDataIn *translate_;
84  std::map<int,StateInData> ps_;
85  int expected_object_num_;
86  std::map<ClassDescP,int> classidmap_;
87  std::map<int,StateClassData> classdatamap_;
88  int nextclassid_;
89  int node_to_node_;
90  int version_;
91  int date_;
92  char userid_[9];
93  char format_;
94  virtual int get_array_void(void*,int);
95 
96  int push_key(const char *key);
97  void pop_key(int n) { key_[n] = '\0'; keylength_ = n; }
98  const char *key() { return key_; }
99 
100  void get_directory();
101  int directory_location() const { return dir_loc_; }
102  void find_and_get_directory();
103 
104  // The following members are called by friend SavableState
105 
111  virtual int getobject(Ref<SavableState> &);
112 
114  virtual int dir_getobject(Ref<SavableState> &, const char *name);
115 
120  virtual void haveobject(int,const Ref<SavableState> &);
121 
124  virtual void nextobject(int);
125  virtual void haveobject(const Ref<SavableState> &);
126 
127  void have_classdesc() { have_cd_ = 1; }
128  int need_classdesc() { int tmp = have_cd_; have_cd_ = 0; return !tmp; }
129 
134  virtual int get(const ClassDesc**);
135  public:
136  StateIn();
137  virtual ~StateIn();
138 
141  virtual void get_header();
142 
145  virtual int version(const ClassDesc*);
146 
148  virtual int getstring(char*&);
149 
151  virtual int get(std::string&);
152 
154  virtual int get(char&r, const char *keyword = 0);
155  virtual int get(unsigned int&r, const char *keyword = 0);
156  virtual int get(int&r, const char *keyword = 0);
157  virtual int get(bool&r, const char *keyword = 0);
158  virtual int get(float&r, const char *keyword = 0);
159  virtual int get(double&r, const char *keyword = 0);
162  virtual int get(char*&);
163  virtual int get(unsigned int*&);
164  virtual int get(int*&);
165  virtual int get(float*&);
166  virtual int get(double*&);
169  virtual int get_array_char(char*p,int size);
170  virtual int get_array_uint(unsigned int*p,int size);
171  virtual int get_array_int(int*p,int size);
172  virtual int get_array_float(float*p,int size);
173  virtual int get_array_double(double*p,int size);
174 
176  template <class T>
177  int get(typename std::vector<T> &v) {
178  int l;
179  int r = get(l);
180  if (l) { v.resize(l); for (int i=0; i<l; i++) r += get(v[i]); }
181  return r;
182  }
183 
188  int node_to_node() const { return node_to_node_; }
189 
191  virtual int use_directory();
192 
194  virtual int tell();
197  virtual void seek(int);
200  virtual int seekable();
201  int has_directory() const { return dir_loc_ != 0; }
202 
205  virtual void list_objects(std::ostream& = ExEnv::out0());
206 
209  void set_override(const Ref<KeyVal>&kv) { override_ = kv; }
211  const Ref<KeyVal> &override() const { return override_; }
212  };
213 
214 }
215 
216 #endif
217 
218 // Local Variables:
219 // mode: c++
220 // c-file-style: "CLJ"
221 // End:
virtual int get_array_char(char *p, int size)
These restore data saved with StateOut's put.
virtual int getstring(char *&)
This restores strings saved with StateOut::putstring.
int node_to_node() const
True if this is a node to node save/restore.
Definition: statein.h:188
virtual void haveobject(int, const Ref< SavableState > &)
When storage has been allocated during object restoration, this routine is called with the object ref...
Classes which need runtime information about themselves and their relationship to other classes can v...
Definition: class.h:244
A template class that maintains references counts.
Definition: ref.h:332
virtual int tell()
Return the current position in the file.
virtual void list_objects(std::ostream &=ExEnv::out0())
List all the objects to the stream.
virtual void seek(int)
Set the current position in the file.
Definition: mpqcin.h:13
Restores objects that derive from SavableState.
Definition: statein.h:70
Definition: statein.h:44
This class is used to contain information about classes.
Definition: class.h:158
Definition: statein.h:54
virtual void nextobject(int)
A call to nextobject followed by havepointer(int) is equiv to havepointer(int,void**);.
static std::ostream & out0()
Return an ostream that writes from node 0.
virtual int seekable()
Return non-zero if seek does anything sensible.
virtual int dir_getobject(Ref< SavableState > &, const char *name)
This restores objects that are listed in the directory.
virtual int use_directory()
Returns true of this object uses a directory.
Convert data from other formats.
Definition: translate.h:188
virtual int version(const ClassDesc *)
Returns the version of the ClassDesc in the persistent object or -1 if info on the ClassDesc doesn't ...
void set_override(const Ref< KeyVal > &kv)
Give this StateIn a KeyVal object that is used to override values.
Definition: statein.h:209
Base class for objects that can save/restore state.
Definition: state.h:46
virtual int getobject(Ref< SavableState > &)
This is used to restore an object.
virtual void get_header()
Read in the header information.

Generated at Fri Mar 13 2015 21:34:59 for MPQC 2.3.1 using the documentation package Doxygen 1.8.8.