00001 
00002 
00003 #include <utility>
00004 #include <vector>
00005 #include <charm++.h>
00006 #include <boost/multi_array.hpp>
00007 
00008 namespace MSA
00009 {
00010     typedef unsigned short Dimension;
00011     typedef CmiUInt8 cache_id;
00012     using std::pair;
00013     using std::vector;
00014 
00015     template <class T>
00016     class cache_line
00017     {
00018         
00019     };
00020 
00021     template <class T>
00022         class modifiable_cache_line
00023     {
00024         
00025         
00026     };
00027 
00028     template <class T>
00029         class write_cache_line
00030     {
00031 
00032     };
00033 
00034     template <class T>
00035         class accum_cache_line
00036     {
00037 
00038     };
00039 
00040 
00041     
00042     template <class T, Dimension D>
00043         cache_id make_msa(const ExtentList& array_size,
00044                           const ExtentList& section_size,
00045                           const ExtentList& line_size,
00046                           const storage_order_type& storage_layout,
00047                           const T& default_value)
00048     {
00049         
00050         
00051         
00052     }
00053 
00054     template <class T, Dimension D>
00055         class handle
00056     {
00057         
00058         section_map §ions;
00059         
00060         element_layout &layout;
00061         
00062         vector<cache_line<T>*> lines;
00063         
00064         bool valid;
00065     };
00066 
00067     template <class T, Dimension D>
00068         class read  : public handle<T, D>
00069     {
00070     public:
00071         
00072         
00073     private:
00074         
00075     };
00076 
00077     template <class T, Dimension D>
00078         class write : public handle<T, D>
00079     {
00080     public:
00081         
00082 
00083     private:
00084         
00085     };
00086 
00087     template <class T, Dimension D>
00088         class accum : public handle<T, D>
00089     {
00090     public: 
00091         
00092 
00093     private:
00094         
00095         
00096     };
00097 
00098     template <class T, Dimension D>
00099         class owner : public handle<T, D>
00100     {
00101     public:
00102         
00103 
00104     private:
00105         
00106 
00107     };
00108 
00109     
00110 }
00111 
00112