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 (void) v;
00078 return unsigned(mln_max(V));
00079 }
00080
00081 template <unsigned n>
00082 inline
00083 unsigned max_component(const value::rgb<n>&)
00084 {
00085 return mln_max(mln::value::int_u<n>);
00086 }
00087
00088 inline
00089 unsigned max_component(const fld::data_type::E& t)
00090 {
00091 switch (t)
00092 {
00093 case data_type::BYTE: return mln_max(unsigned char);
00094 case data_type::SHORT: return mln_max(unsigned short);
00095 case data_type::INTEGER: return mln_max(unsigned);
00096 case data_type::FLOAT: return unsigned(mln_max(float));
00097 case data_type::DOUBLE: return unsigned(mln_max(double));
00098 default: return 0;
00099 }
00100 }
00101
00102 # endif // ! MLN_INCLUDE_ONLY
00103 }
00104
00105 }
00106
00107 }
00108
00109 #endif // !MLN_IO_FLD_MAX_COMPONENTS_HH