1 #ifndef SINGLE_BAND_IMAGE_POLICY_HXX
2 #define SINGLE_BAND_IMAGE_POLICY_HXX
3 
4 #include "vigra/imagehierarchy.hxx"
5 #include <unittest.hxx>
6 
7 template<class IMAGEPOLICY>                                 // Bei der IMAGEPOLICY handelt es sich bis jetzt nur um GrayImage, spaeter soll SelectBandImage folgen
8 class SingleBandImagePolicy
9 {
10 
11 /* Bei dem Image (in diesem Fall VariableBandsImage) handelt es sich um die zu testende Klasse
12 *  dagegen ChildImage ist die abgeleitete Klasse von Image, z.B. GrayImage oder SelectBandImage.
13 *  Die VariableBandsImage-Konstruktoren sind protected und somit nicht aufrufbar. Um dei Klasse zu testen,
14 *  muessen wir die Konstruktoren der abgeleiteten Klassen benutzen. Somit werden alle zur Verfuegung
15 *  stehende Funktionen getestet.
16 *  In der Testklasse werden die ChildImage Konstruktoren aufgerufen, aber an einem Objekt
17 *  der Image Klasse (Polymorphie).
18 */
19 
20 public:
21     typedef typename IMAGEPOLICY::Image             ChildImage;             // abgeleitete Klasse der ImageKlasse. Es kann sich hierbei um GrayImage oder SelectBandImage handeln
22     typedef vigra::SingleBandImage                  Image;                  // entspricht dem SingleBandImage
23     typedef vigra::SingleBandImage::PixelType       PixelType;              // --||-- GrayValue (float)
24     typedef typename ChildImage::value_type         value_type;             // --||-- GrayValue (float)
25     typedef typename ChildImage::value_type         child_value_type;       // --||-- GrayValue (float)
26     typedef std::vector<value_type>                 data_array_type;        // Vektor von GrayValues (float)
27     typedef std::vector<value_type>                 child_data_array_type;  // Vektor von GrayValues (float)
28 
getData()29     static  data_array_type getData()
30     {
31         return IMAGEPOLICY::getData();
32     }
33 
getChildData()34     static  child_data_array_type getChildData()
35     {
36         return IMAGEPOLICY::getChildData();
37     }
38 
factory()39     static ChildImage * factory()
40     {
41         return new ChildImage();
42     }
43 
factory(int x,int y)44     static ChildImage * factory(int x, int y)
45     {
46         return new ChildImage(x,y);
47     }
48 
factory(vigra::Diff2D size)49     static ChildImage * factory(vigra::Diff2D size)
50     {
51         return new ChildImage(size);
52     }
53 
factory(int x,int y,value_type pixel)54     static ChildImage * factory(int x, int y, value_type pixel)
55     {
56         return new ChildImage(x, y, pixel);
57     }
58 
factory(ChildImage image)59     static ChildImage * factory(ChildImage image)
60     {
61         return new ChildImage(image);
62     }
63 
factory(typename ChildImage::InnerImage image)64     static ChildImage * factory(typename ChildImage::InnerImage image)
65     {
66         return new ChildImage(image);
67     }
68 };
69 
70 struct SingleImageTestSuite
71 : public vigra::test_suite
72 {
73     SingleImageTestSuite();
74 };
75 
76 #endif // SINGLE_BAND_IMAGE_POLICY_HXX
77