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 }
00081
00082
00083 #endif