MPQC 2.3.1

- Main Page
- Related Pages
- Classes
- Files

- File List

file.h
1 //
2 // file.h
3 //
4 // Copyright (C) 1996 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 #ifdef __GNUC__
29 #pragma interface
30 #endif
31
32 #ifndef _util_group_file_h
33 #define _util_group_file_h
34
35 #include <iostream>
36
37 #include <scconfig.h>
38 #include <util/class/class.h>
39 #include <util/group/thread.h>
40 #include <util/group/memory.h>
41
42 namespace sc {
43
55 class FileGrp: public DescribedClass {
56 private:
57 int datafile_;
58 char *filename_;
59
60 Ref<ThreadLock> *locks_;
61 int nlock_;
62
63 void init_locks();
64
65
66 protected:
67
68 // derived classes must fill in all these
69 // ~FileGrp deletes the arrays
70 int me_;
71 int n_;
72 distsize_t *offsets_; // offsets_[n_] is the fence for all data
73
74 // set to nonzero for debugging information
75 int debug_;
76
77 void obtain_local_lock(size_t start, size_t fence);
78 void release_local_lock(size_t start, size_t fence);
79 public:
80 FileGrp();
81 FileGrp(const Ref<KeyVal>&);
82 virtual ~FileGrp();
83
85 void open();
87 void close();
89 void set_filename(char *name);
91 const char* get_filename() const { return datafile_; };
92
94 int me() const { return me_; }
96 int n() const { return n_; }
97
101 virtual void set_localsize(size_t) = 0;
103 size_t localsize() { return distsize_to_size(offsets_[me_+1]-offsets_[me_]); }
105 distsize_t localoffset() { return offsets_[me_]; }
107 int size(int node)
108 { return distsize_to_size(offsets_[node+1] - offsets_[node]); }
110 distsize_t offset(int node) { return offsets_[node]; }
112 distsize_t totalsize() { return offsets_[n_]; }
113
115 virtual void activate();
117 virtual void deactivate();
118
120 virtual void *obtain_writeonly(distsize_t offset, int size) = 0;
126 virtual void *obtain_readwrite(distsize_t offset, int size) = 0;
128 virtual void *obtain_readonly(distsize_t offset, int size) = 0;
130 virtual void release_readonly(void *data, distsize_t offset, int size) = 0;
132 virtual void release_writeonly(void *data, distsize_t offset, int size)=0;
135 virtual void release_readwrite(void *data, distsize_t offset, int size)=0;
136
137 virtual void sum_reduction(double *data, distsize_t doffset, int dsize);
138 virtual void sum_reduction_on_node(double *data, size_t doffset, int dsize,
139 int node = -1);
140
143 virtual void sync() = 0;
144
151 virtual void catchup();
152
154 virtual void print(std::ostream &o = ExEnv::out0()) const;
155
163 static FileGrp* initial_filegrp(int &argc, char** argv);
164 static FileGrp* initial_filegrp();
167 static void set_default_filegrp(const Ref<FileGrp>&);
169 static FileGrp* get_default_filegrp();
171 virtual FileGrp* clone() =0;
172 };
173
174 }
175
176 #endif
177
178 // Local Variables:
179 // mode: c++
180 // c-file-style: "CLJ"
181 // End: