aboutsummaryrefslogtreecommitdiff
path: root/src/Panda/Array.h
blob: 834fd365527f24e0fa5268e94cdb3e7975bcc431 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
#ifndef Array_dot_h
#define Array_dot_h

#include "List.h"
#include "ArrayDistribution.h"
#include "Chunk.h"

#include "external/IEEEIO/src/Arch.h"

//#include "../IEEEIO/IEEEIO.h"
//#include "../IEEEIO/IOProtos.h"


class Array : public Template, public Linkable {
 protected:
  ArrayDistribution	  *compute_node_layout_;
  ArrayDistribution	  *io_node_layout_;
  ArrayDistribution       *subchunk_layout_;
  int                     element_size_;
  int                     ieee_size_;
  char                    *name_;
  Boolean                 natural_chunked_;
  Boolean                 sub_chunked_;
  Boolean                 overlap_;
  int			  op_type_;
  int              	  io_strategy_;

  void                    do_init(char*, int, int*, int, 
				  ArrayLayout*,     Distribution*, 
				  ArrayLayout*,     Distribution*, 
				  ArrayLayout*,     Distribution*, 
				  ChunkAllocPolicy, ChunkAllocPolicy, 
				  Block_Distribution);
  void                    allocate_chunks(int);
  void                    allocate_chunks(int,int,char**,int);
  ArrayDistribution       *unpack_layout(int **);

 public:
                           Array(char*,int, int*, int, ArrayLayout*, 
				 Distribution*, ArrayLayout*,
				 Distribution*);
                           Array(char*,int, int*, int, ArrayLayout*, 
				 Distribution*, ArrayLayout*,
				 Distribution*, char *);
                           Array(char*,int, int*, int, ArrayLayout*, 
				 Distribution*, ArrayLayout*,
				 Distribution*, ArrayLayout*,
				 Distribution*);
                           Array(char*,int, int*, int, ArrayLayout*, 
				 Distribution*, ArrayLayout*,
				 Distribution*, ArrayLayout*,
				 Distribution*, char *);
			   Array(char*,int, int*, int,
                                 ArrayLayout*, Distribution*,
                                 ArrayLayout*, Distribution*, char *, int);
                           Array(int **);
                           Array();
  virtual                 ~Array();
  void			   init(int,int,int*,int);
  Chunk*                   get_next_chunk();
  int                      which_node(int,int,int);
  void                     delete_chunks();
  void                     pack(int**, int*);
  ArrayDistribution*       layout(int);
  int                      which_node(int,int);
  Chunk*                   find_chunk(int);
  int                      element_size();
  int                      ieee_size();
  Boolean                  nat_chunked();
  Boolean                  sub_chunked();
  void                     make_sub_chunks(Chunk*);
  int                      array_info();
  int                      get_next_index(Chunk*&,int,int,int,int);
  int                      num_of_chunks();
  void                     set_data_ptr(char *);
  char*                    get_data_ptr();
  Boolean                  overlaped();
  void			   read_schema_file(IOFile);

  void			   timestep();
  void			   read_timestep();
  void			   checkpoint();
  void			   restart();
  int 			   op_type();
  int			   io_strategy();
};

#endif