Java互換ライブラリ(6)

そういえばJava互換って書いてますが、この辺って互換と何の関係もないですよね(;´Д`)


昨日の
ピクセルフォーマットクラスは、変換子を定義することにより、組み合わせ爆発を防ぎました。
次はfunctorクラスです。
これは転送方法について定義したクラスで、例えば単純転送クラスと透過転送クラスなら以下のようになります。

// 単純転送functor
class RasterOperation_Copy{
public:
    template< class DST , class SRC >
    void operator()( DST& dst , SRC& src ){
        dst = src;
    }
};

// 透過転送functor
template< class TYPE >
class RasterOperation_ColorKey{
public:
    RasterOperation_ColorKey( TYPE& colorKey ) : _colorKey( colorKey ){}
    
    template< class DST , class SRC >
    void operator()( DST& dst , SRC& src ){
        if( src.getRGB() != _colorKey.getRGB() ){
            dst = src;
        }
    }
private:
    TYPE _colorKey;
};

こんな感じのfunctorを用意することにより、転送方法が増えるたびにメソッド書き換えるなどというめんどくさい手間を省くことが出来ます。


使い方は、どこかでfunctorを作っておいて、

functor( rgb565 , rgb565 );

とするだけです。
これだけを見ると、functorが単純転送なのか、それとも透過転送なのかが分かりません。
つまり、転送ルーチンを書く側は、2つのピクセル同士がどんな方法で転送するか、というのを意識する必要がないのです。
なので、わざわざ転送方法ごとに転送ルーチンを増やす必要が無くなるのです。



これでピクセルフォーマットクラスと転送用functorクラスの実装が出来ました。
後はこれに対して転送ルーチンを書くだけです。