00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012 #ifndef MTL_VECTOR_UNIT_VECTOR_INCLUDE
00013 #define MTL_VECTOR_UNIT_VECTOR_INCLUDE
00014
00015 namespace mtl {
00016
00017 namespace traits {
00018
00020 template <typename Value= double>
00021 struct unit_vector
00022 {
00023 typedef dense_vector<Value> type;
00024 };
00025 }
00026
00027 namespace vector {
00028
00030
00039 template <typename Value>
00040 typename traits::unit_vector<Value>::type
00041 inline unit_vector(std::size_t k, std::size_t n)
00042 {
00043 using math::zero; using math::one;
00044 dense_vector<Value> v(n, zero(Value()));
00045 v[k]= one(Value());
00046 return v;
00047 }
00048
00050 traits::unit_vector<double>::type
00051 inline unit_vector(std::size_t k, std::size_t n)
00052 {
00053 return unit_vector<double>(k, n);
00054 }
00055
00056 }
00057
00058 }
00059
00060 #endif // MTL_VECTOR_UNIT_VECTOR_INCLUDE