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 #ifndef MLN_IO_FLD_MAX_COMPONENTS_HH
00028 # define MLN_IO_FLD_MAX_COMPONENTS_HH
00029
00034
00035 # include <mln/algebra/vec.hh>
00036 # include <mln/value/rgb.hh>
00037 # include <mln/io/fld/header.hh>
00038
00039 namespace mln
00040 {
00041
00042 namespace io
00043 {
00044
00045 namespace fld
00046 {
00047
00048 template <typename V>
00049 inline
00050 unsigned max_component(const V&);
00051
00052 template <unsigned n, typename V>
00053 inline
00054 unsigned max_component(const algebra::vec<n, V>& v);
00055
00056 template <unsigned n>
00057 inline
00058 unsigned max_component(const value::rgb<n>&);
00059
00060 inline
00061 unsigned max_component(const fld::data_type::E& t);
00062
00063 # ifndef MLN_INCLUDE_ONLY
00064
00065 template <typename V>
00066 inline
00067 unsigned max_component(const V&)
00068 {
00069 return unsigned(mln_max(V));
00070 }
00071
00072
00073 template <unsigned n, typename V>
00074 inline
00075 unsigned max_component(const algebra::vec<n, V>& v)
00076 {
00077 return unsigned(mln_max(V));
00078 }
00079
00080 template <unsigned n>
00081 inline
00082 unsigned max_component(const value::rgb<n>&)
00083 {
00084 return mln_max(mln::value::int_u<n>);
00085 }
00086
00087 inline
00088 unsigned max_component(const fld::data_type::E& t)
00089 {
00090 switch (t)
00091 {
00092 case data_type::BYTE: return mln_max(unsigned char);
00093 case data_type::SHORT: return mln_max(unsigned short);
00094 case data_type::INTEGER: return mln_max(unsigned);
00095 case data_type::FLOAT: return unsigned(mln_max(float));
00096 case data_type::DOUBLE: return unsigned(mln_max(double));
00097 default: return 0;
00098 }
00099 }
00100
00101 # endif // ! MLN_INCLUDE_ONLY
00102 }
00103
00104 }
00105
00106 }
00107
00108 #endif // !MLN_IO_FLD_MAX_COMPONENTS_HH