aboutsummaryrefslogtreecommitdiffstats
path: root/meowpp/colors/RGB.h
blob: 5531d967bc17d1ffe5c7ae7d93e4be7d969f56a6 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
#ifndef   RGB_H_
#define   RGB_H_

namespace meow{
  template<class T>
  class RGB{
    protected:
      T rgb_[3];
      RGB();
      RGB(T const& r, T const& g, T const& b);
      RGB(T const* rgb);
    public:
      virtual ~RGB() { }
      ///////////////// **# not force #** ////////////////
      virtual T rMax() const = 0;
      virtual T rMin() const = 0;
      virtual T gMax() const = 0;
      virtual T gMin() const = 0;
      virtual T bMax() const = 0;
      virtual T bMin() const = 0;
      /////////////////// **# access #** /////////////////
      T r()           const;
      T g()           const;
      T b()           const;
      T rgb(size_t i) const;
      T bgr(size_t i) const;
      /////////////////// **# setting #** ////////////////
      T r(T const& val);
      T g(T const& val);
      T b(T const& val);
      T rgb(size_t i, T const& val);
      T bgr(size_t i, T const& val);
  };

  class RGBf: public RGB<double>{
    public:
      RGBf();
      RGBf(double const&r,double const&g,double const&b);
      RGBf(double const* rgb);
      ~RGBf();
      double rMin() const;
      double rMax() const;
      double gMin() const;
      double gMax() const;
      double bMin() const;
      double bMax() const;
  };

  class RGBi: public RGB<int32_t>{
    public:
      RGBi();
      RGBi(int32_t const&r,int32_t const&g,int32_t const&b);
      RGBi(int32_t const* rgb);
      ~RGBi();
      int32_t rMin() const;
      int32_t rMax() const;
      int32_t gMin() const;
      int32_t gMax() const;
      int32_t bMin() const;
      int32_t bMax() const;
  };
  
  template<class RGB_T1, class RGB_T2>
  inline void RGB_to_RGB(RGB<RGB_T1> const& a, RGB<RGB_T2>* b);
}

#include "RGB.hpp"

#endif // RGB_H_