diff options
Diffstat (limited to 'src/Panda/ArrayDistribution.h')
-rw-r--r-- | src/Panda/ArrayDistribution.h | 70 |
1 files changed, 70 insertions, 0 deletions
diff --git a/src/Panda/ArrayDistribution.h b/src/Panda/ArrayDistribution.h new file mode 100644 index 0000000..12e68e1 --- /dev/null +++ b/src/Panda/ArrayDistribution.h @@ -0,0 +1,70 @@ +#ifndef ArrayDistribution_dot_h +#define ArrayDistribution_dot_h + +#include "definitions.h" +#include "List.h" +#include "ArrayLayout.h" +#include "Chunk.h" + +class Array; +class ArrayDistribution +{ +protected: + int num_of_chunks_; + List *chunk_list_; + Cell *current_cell_; +public: + ArrayDistribution(); + ArrayDistribution(int **); + virtual ~ArrayDistribution(); + virtual Boolean equal(ArrayDistribution *); + virtual int distribution_type(); + virtual void pack(int **); + virtual int total_elements(); + virtual ChunkAllocPolicy alloc_policy(); + virtual int get_next_index(Chunk *&,int,int,int,int); + List *chunk_list(); + void add_last(Chunk *); + Chunk *get_next_chunk(); + void list_clear(); +}; + + +class RegularDistribution : public ArrayDistribution +{ + ArrayLayout *layout_; + int rank_; + Distribution *dist_; + Block_Distribution block_dist_; + ChunkAllocPolicy alloc_policy_; +public: + RegularDistribution(int **); + RegularDistribution(int , ArrayLayout *, + Distribution *, ChunkAllocPolicy, + Block_Distribution, int*); + RegularDistribution(int , ArrayLayout *, + Distribution *, ChunkAllocPolicy, + Block_Distribution); + ~RegularDistribution(); + Boolean equal(ArrayDistribution *); + ArrayLayout *layout(); + Distribution *distribution(); + int distribution_type(); + void pack(int **); + int total_elements(); + ChunkAllocPolicy alloc_policy(); + int get_next_index(Chunk *&,int,int,int,int); + Block_Distribution block_dist(); +}; + +class IrregularDistribution : public ArrayDistribution +{ +public: + IrregularDistribution(int, Chunk **); + int distribution_type(); + int total_elements(); + int get_next_index(Chunk *&,int,int,int,int); +}; + +#endif + |