$include_dir="/home/hyper-archives/boost-commit/include"; include("$include_dir/msg-header.inc") ?>
Subject: [Boost-commit] svn:boost r84391 - trunk/boost/gil/extension/toolbox/image_types
From: chhenning_at_[hidden]
Date: 2013-05-20 11:44:31
Author: chhenning
Date: 2013-05-20 11:44:30 EDT (Mon, 20 May 2013)
New Revision: 84391
URL: http://svn.boost.org/trac/boost/changeset/84391
Log:
Added some metafunctions to fulfill some og gil's concepts.
Text files modified: 
   trunk/boost/gil/extension/toolbox/image_types/subchroma_image.hpp |   139 ++++++++++++++++++++++++++++++++++++++- 
   1 files changed, 133 insertions(+), 6 deletions(-)
Modified: trunk/boost/gil/extension/toolbox/image_types/subchroma_image.hpp
==============================================================================
--- trunk/boost/gil/extension/toolbox/image_types/subchroma_image.hpp	(original)
+++ trunk/boost/gil/extension/toolbox/image_types/subchroma_image.hpp	2013-05-20 11:44:30 EDT (Mon, 20 May 2013)
@@ -117,6 +117,58 @@
 };
 
 
+/////////////////////////////
+//  PixelBasedConcept
+/////////////////////////////
+
+template < typename Locator, typename Factors >
+struct channel_type< subchroma_image_locator< Locator, Factors > > 
+    : public channel_type< typename subchroma_image_locator< Locator, Factors >::type > {};
+
+template < typename Locator, typename Factors >
+struct color_space_type< subchroma_image_locator< Locator, Factors > > 
+    : public color_space_type< typename subchroma_image_locator< Locator, Factors >::type > {};
+
+template < typename Locator, typename Factors >
+struct channel_mapping_type< subchroma_image_locator< Locator, Factors > > 
+    : public channel_mapping_type< typename subchroma_image_locator< Locator, Factors >::type > {};
+
+template < typename Locator, typename Factors >
+struct is_planar< subchroma_image_locator< Locator, Factors > > 
+    : public is_planar< typename subchroma_image_locator< Locator, Factors >::type > {};
+
+/////////////////////////////
+//  HasDynamicXStepTypeConcept
+/////////////////////////////
+
+template < typename Locator, typename Factors >
+struct dynamic_x_step_type< subchroma_image_locator< Locator, Factors > >
+{
+    typedef typename subchroma_image_locator< Locator, Factors >::type type;
+};
+
+/////////////////////////////
+//  HasDynamicYStepTypeConcept
+/////////////////////////////
+
+template < typename Locator, typename Factors >
+struct dynamic_y_step_type< subchroma_image_locator< Locator, Factors > >
+{
+    typedef typename subchroma_image_locator< Locator, Factors >::type type;
+};
+
+/////////////////////////////
+//  HasTransposedTypeConcept
+/////////////////////////////
+
+template < typename Locator, typename Factors >
+struct transposed_type< subchroma_image_locator< Locator, Factors > >
+{
+    typedef typename subchroma_image_locator< Locator, Factors >::type type;
+};
+
+//////////////////////////////////
+
 ////////////////////////////////////////////////////////////////////////////////////////
 /// \class subchroma_image_view
 /// \ingroup ImageViewModel PixelBasedModel
@@ -130,8 +182,8 @@
 {
 public:
 
-    typedef typename Locator                     locator_t;
-    typedef typename locator_t::deref_fn_t       deref_fn_t;
+    typedef typename Locator                     locator;
+    typedef typename locator::deref_fn_t         deref_fn_t;
     typedef typename deref_fn_t::plane_locator_t plane_locator_t;
 
 
@@ -159,7 +211,7 @@
     /// copy constructor
     template< typename Subchroma_View >
     subchroma_image_view( const Subchroma_View& v )
-    : image_view< locator_t >( v )
+    : image_view< locator >( v )
     {}
 
     const point_t& v_ssfactors() const { return point_t( get_deref_fn().vx_ssfactor(), get_deref_fn().vx_ssfactor() ); }
@@ -191,6 +243,59 @@
     point_t _u_dimensions;
 };
 
+
+/////////////////////////////
+//  PixelBasedConcept
+/////////////////////////////
+
+template < typename Locator, typename Factors >
+struct channel_type< subchroma_image_view< Locator, Factors > > 
+    : public channel_type< Locator > {}; 
+
+template < typename Locator, typename Factors >
+struct color_space_type< subchroma_image_view< Locator, Factors > > 
+    : public color_space_type< Locator > {};
+
+template < typename Locator, typename Factors >
+struct channel_mapping_type< subchroma_image_view< Locator, Factors > >
+     : public channel_mapping_type< Locator > {};
+
+template < typename Locator, typename Factors >
+struct is_planar< subchroma_image_view< Locator, Factors > > 
+    : public is_planar< Locator > {};
+
+/////////////////////////////
+//  HasDynamicXStepTypeConcept
+/////////////////////////////
+
+template < typename Locator, typename Factors >
+struct dynamic_x_step_type< subchroma_image_view< Locator, Factors > >
+{
+    typedef image_view< typename dynamic_x_step_type< Locator >::type > type;
+};
+
+/////////////////////////////
+//  HasDynamicYStepTypeConcept
+/////////////////////////////
+
+template < typename Locator, typename Factors >
+struct dynamic_y_step_type< subchroma_image_view< Locator, Factors > >
+{
+    typedef image_view< typename dynamic_y_step_type< Locator >::type > type;
+};
+
+/////////////////////////////
+//  HasTransposedTypeConcept
+/////////////////////////////
+
+template < typename Locator, typename Factors >
+struct transposed_type< subchroma_image_view< Locator, Factors > >
+{
+    typedef image_view< typename transposed_type< Locator >::type > type;
+};
+
+
+/////////////////////////////////////////////////////////////
 template< int J
         , int a
         , int b
@@ -246,7 +351,7 @@
 class subchroma_image : public Scaling_Factors< mpl::at_c< Factors, 0 >::type::value
                                               , mpl::at_c< Factors, 1 >::type::value
                                               , mpl::at_c< Factors, 2 >::type::value
-                                                         >
+                                              >
 {
 
 public:
@@ -282,7 +387,7 @@
     , _v_plane( y_width / ss_X, y_height / ss_Y, 0, Allocator() )
     , _u_plane( y_width / ss_X, y_height / ss_Y, 0, Allocator() )
     {
-        init( point_t( y_width, y_height ) );
+        init();
     }
 
 public:
@@ -291,7 +396,7 @@
 
 private:
 
-    void init( const point_t& y_dimensions )
+    void init()
     {
         typedef subchroma_image_deref_fn< pixel_locator_t
                                         , Factors
@@ -323,6 +428,28 @@
     plane_image_t _u_plane;
 };
 
+
+/////////////////////////////
+//  PixelBasedConcept
+/////////////////////////////
+
+template < typename Pixel, typename Factors, typename Alloc >
+struct channel_type< subchroma_image< Pixel, Factors, Alloc > >
+    : public channel_type< Pixel > {};
+
+template < typename Pixel, typename Factors, typename Alloc >
+struct color_space_type< subchroma_image< Pixel, Factors, Alloc > >
+    : public color_space_type< Pixel > {};
+
+template < typename Pixel, typename Factors, typename Alloc >
+struct channel_mapping_type<  subchroma_image< Pixel, Factors, Alloc > >
+    : public channel_mapping_type< Pixel > {};
+
+template < typename Pixel, typename Factors, typename Alloc >
+struct is_planar< subchroma_image< Pixel, Factors, Alloc > >
+    : public mpl::bool_< false > {};
+
+
 /////////////////////////////////////////////////////////////////////////////////////////
 /// \name view, const_view
 /// \brief Get an image view from an subchroma_image