Main Page   Namespace List   Class Hierarchy   Compound List   File List   Namespace Members   Compound Members   File Members   Examples  

ListAssignment.H

Go to the documentation of this file.
00001 
00015 #ifndef _LISTASSIGNMENT_H
00016 #define _LISTASSIGNMENT_H
00017 #include <error.H>
00018 
00019 namespace xchen
00020 {
00021   
00023   template<typename ele_t, typename ele_iterator_t, int Sz>
00024   struct ListAssignmentCheckSzCt
00025   {
00026       ele_iterator_t iter;
00027       
00028       ListAssignmentCheckSzCt(ele_iterator_t itr) : iter(itr) { }
00029 
00030       ListAssignmentCheckSzCt<ele_t, ele_iterator_t, Sz-1> operator,(ele_t x)
00031       {
00032         *iter = x; 
00033         return ListAssignmentCheckSzCt<ele_t, ele_iterator_t, Sz-1>(iter+1);
00034       }
00035   };
00036 
00037   template<bool>
00038   struct ListAssignmentLargerThanSize;
00039   struct ListAssignmentLargerThanSize<false> { };
00040 
00041   template<typename ele_t, typename ele_iterator_t>
00042   struct ListAssignmentCheckSzCt<ele_t, ele_iterator_t, 0>
00043   {
00044       ele_iterator_t iter;
00045       ListAssignmentCheckSzCt(ele_iterator_t itr) : iter(itr) { }
00046 
00047       void operator,(ele_t x)
00048       {
00049         ListAssignmentLargerThanSize<true> error;
00050       }
00051   };
00052 
00053 
00054 
00055 
00057   template<typename ele_t, typename ele_iterator_t>
00058   struct ListAssignmentCheckSzRt
00059   {
00060       ele_iterator_t iter;
00061       int sz;
00062       ListAssignmentCheckSzRt(ele_iterator_t itr, int Sz) : iter(itr), sz(Sz) { }
00063       ~ListAssignmentCheckSzRt() 
00064       { 
00065         if(sz>0) error_exit("Too few elements in assignment list.\n");
00066       }
00067 
00068       ListAssignmentCheckSzRt<ele_t, ele_iterator_t>& operator=(ele_t x) { return operator,(x); }
00069       ListAssignmentCheckSzRt<ele_t, ele_iterator_t>& operator,(ele_t x)
00070       {
00071         if(!sz) 
00072           error_exit("Too many elements in assignment list.\n");
00073 
00074         *iter = x; 
00075         ++iter; --sz;
00076         return *this;
00077       }
00078   };
00079 
00080 }//end namespace xchen
00081 
00082 
00083 #endif

Generated on Wed Apr 7 21:40:49 2004 by doxygen1.2.18