00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036 #ifndef BZ_LISTINIT_H
00037 #define BZ_LISTINIT_H
00038
00039 BZ_NAMESPACE(blitz)
00040
00041 template<typename T_numtype, typename T_iterator>
00042 class ListInitializer {
00043
00044 public:
00045 ListInitializer(T_iterator iter)
00046 : iter_(iter)
00047 {
00048 }
00049
00050 ListInitializer<T_numtype, T_iterator> operator,(T_numtype x)
00051 {
00052 *iter_ = x;
00053 return ListInitializer<T_numtype, T_iterator>(iter_ + 1);
00054 }
00055
00056 private:
00057 ListInitializer();
00058
00059 protected:
00060 T_iterator iter_;
00061 };
00062
00063 template<typename T_array, typename T_iterator = _bz_typename T_array::T_numtype*>
00064 class ListInitializationSwitch {
00065
00066 public:
00067 typedef _bz_typename T_array::T_numtype T_numtype;
00068
00069 ListInitializationSwitch(const ListInitializationSwitch<T_array>& lis)
00070 : array_(lis.array_), value_(lis.value_),
00071 wipeOnDestruct_(true)
00072 {
00073 lis.disable();
00074 }
00075
00076 ListInitializationSwitch(T_array& array, T_numtype value)
00077 : array_(array), value_(value), wipeOnDestruct_(true)
00078 { }
00079
00080 ~ListInitializationSwitch()
00081 {
00082 if (wipeOnDestruct_)
00083 array_.initialize(value_);
00084 }
00085
00086 ListInitializer<T_numtype, T_iterator> operator,(T_numtype x)
00087 {
00088 wipeOnDestruct_ = false;
00089 T_iterator iter = array_.getInitializationIterator();
00090 *iter = value_;
00091 T_iterator iter2 = iter + 1;
00092 *iter2 = x;
00093 return ListInitializer<T_numtype, T_iterator>(iter2 + 1);
00094 }
00095
00096 void disable() const
00097 {
00098 wipeOnDestruct_ = false;
00099 }
00100
00101 private:
00102 ListInitializationSwitch();
00103
00104 protected:
00105 T_array& array_;
00106 T_numtype value_;
00107 mutable bool wipeOnDestruct_;
00108 };
00109
00110 BZ_NAMESPACE_END
00111
00112 #endif // BZ_LISTINIT_H
00113