8000 Further C++11-dependent simplifications. · matplotlib/matplotlib@78057fc · GitHub
[go: up one dir, main page]

Skip to content

Commit 78057fc

Browse files
committed
Further C++11-dependent simplifications.
1 parent 87183e4 commit 78057fc

File tree

1 file changed

+33
-78
lines changed

1 file changed

+33
-78
lines changed

src/_image_resample.h

Lines changed: 33 additions & 78 deletions
Original file line numberDiff line numberDiff line change
@@ -500,91 +500,46 @@ typedef enum {
500500
} interpolation_e;
501501

502502

503-
template<typename T> struct agg_type { typedef T type; };
503+
template<class T> struct agg_type { typedef T type; };
504504
template<> struct agg_type<double> { typedef agg::gray64 type; };
505505
template<> struct agg_type<float> { typedef agg::gray32 type; };
506506
template<> struct agg_type<unsigned short> { typedef agg::gray16 type; };
507507
template<> struct agg_type<unsigned char> { typedef agg::gray8 type; };
508508

509509

510-
// Backport some C++11 utilities.
511-
template<bool, typename = void> struct enable_if {};
512-
template<typename T> struct enable_if<true, T> { typedef T type; };
513-
// (std::conditional + std::is_same)
514-
template<class U, class V, class T, class F> struct if_is_same { typedef F type; };
515-
template<class U, class T, class F> struct if_is_same<U, U, T, F> { typedef T type; };
516-
517-
template<typename, typename = void> struct type_mapping;
518-
519-
510+
template<class, class = void> struct type_mapping;
520511
// Use this specialization if type::r exists, i.e. for RGBA types.
521-
template<typename T>
522-
struct type_mapping<T, typename enable_if<sizeof(agg_type<T>::type::r)>::type>
512+
template<class T>
513+
struct type_mapping<T, typename std::enable_if<sizeof(agg_type<T>::type::r)>::type>
523514
{
524-
typedef typename agg_type<T>::type color_type;
525-
typedef typename
526-
if_is_same<
527-
T, agg::rgba8,
528-
fixed_blender_rgba_plain<color_type, agg::order_rgba>,
529-
agg::blender_rgba_plain<color_type, agg::order_rgba>
530-
>::type
531-
blender_type;
532-
typedef typename
533-
if_is_same<
534-
T, agg::rgba8,
535-
fixed_blender_rgba_pre<color_type, agg::order_rgba>,
536-
agg::blender_rgba_pre<color_type, agg::order_rgba>
537-
>::type
538-
pre_blender_type;
539-
typedef agg::pixfmt_alpha_blend_rgba<blender_type, agg::rendering_buffer> pixfmt_type;
540-
typedef agg::pixfmt_alpha_blend_rgba<pre_blender_type, agg::rendering_buffer> pixfmt_pre_type;
541-
542-
template <typename A>
543-
struct span_gen_affine_type
544-
{
545-
typedef agg::span_image_resample_rgba_affine<A> type;
546-
};
547-
548-
template <typename A, typename B>
549-
struct span_gen_filter_type
550-
{
551-
typedef agg::span_image_filter_rgba<A, B> type;
552-
};
553-
554-
template <typename A, typename B>
555-
struct span_gen_nn_type
556-
{
557-
typedef agg::span_image_filter_rgba_nn<A, B> type;
558-
};
515+
using color_type = typename agg_type<T>::type;
516+
using blender_type = typename std::conditional<
517+
std::is_same<T, agg::rgba8>::value,
518+
fixed_blender_rgba_plain<color_type, agg::order_rgba>,
519+
agg::blender_rgba_plain<color_type, agg::order_rgba>>::type;
520+
using pre_blender_type = typename std::conditional<
521+
std::is_same<T, agg::rgba8>::value,
522+
fixed_blender_rgba_pre<color_type, agg::order_rgba>,
523+
agg::blender_rgba_pre<color_type, agg::order_rgba>>::type;
524+
using pixfmt_type =
525+
agg::pixfmt_alpha_blend_rgba<blender_type, agg::rendering_buffer>;
526+
using pixfmt_pre_type =
527+
agg::pixfmt_alpha_blend_rgba<pre_blender_type, agg::rendering_buffer>;
528+
template<class A> using span_gen_affine_type = agg::span_image_resample_rgba_affine<A>;
529+
template<class A, class B> using span_gen_filter_type = agg::span_image_filter_rgba<A, B>;
530+
template<class A, class B> using span_gen_nn_type = agg::span_image_filter_rgba_nn<A, B>;
559531
};
560-
561-
562532
// Use this specialization if type::v exists, i.e. for grayscale types.
563-
template<typename T>
564-
struct type_mapping<T, typename enable_if<sizeof(agg_type<T>::type::v)>::type>
533+
template<class T>
534+
struct type_mapping<T, typename std::enable_if<sizeof(agg_type<T>::type::v)>::type>
565535
{
566-
typedef typename agg_type<T>::type color_type;
567-
typedef agg::blender_gray<color_type> blender_type;
568-
typedef agg::pixfmt_alpha_blend_gray<blender_type, agg::rendering_buffer> pixfmt_type;
569-
typedef pixfmt_type pixfmt_pre_type;
570-
571-
template <typename A>
572-
struct span_gen_affine_type
573-
{
574-
typedef agg::span_image_resample_gray_affine<A> type;
575-
};
576-
577-
template <typename A, typename B>
578-
struct span_gen_filter_type
579-
{
580-
typedef agg::span_image_filter_gray<A, B> type;
581-
};
582-
583-
template <typename A, typename B>
584-
struct span_gen_nn_type
585-
{
586-
typedef agg::span_image_filter_gray_nn<A, B> type;
587-
};
536+
using color_type = typename agg_type<T>::type;
537+
using blender_type = agg::blender_gray<color_type>;
538+
using pixfmt_type = agg::pixfmt_alpha_blend_gray<blender_type, agg::rendering_buffer>;
539+
using pixfmt_pre_type = pixfmt_type;
540+
template<class A> using span_gen_affine_type = agg::span_image_resample_gray_affine<A>;
541+
template<class A, class B> using span_gen_filter_type = agg::span_image_filter_gray<A, B>;
542+
template<class A, class B> using span_gen_nn_type = agg::span_image_filter_gray_nn<A, B>;
588543
};
589544

590545

@@ -813,7 +768,7 @@ void resample(
813768

814769
if (params.interpolation == NEAREST) {
815770
if (params.is_affine) {
816-
typedef typename type_mapping_t::template span_gen_nn_type<image_accessor_t, affine_interpolator_t>::type span_gen_t;
771+
typedef typename type_mapping_t::template span_gen_nn_type<image_accessor_t, affine_interpolator_t> span_gen_t;
817772
typedef agg::span_converter<span_gen_t, span_conv_alpha_t> span_conv_t;
818773
typedef agg::renderer_scanline_aa<renderer_t, span_alloc_t, span_conv_t> nn_renderer_t;
819774

@@ -823,7 +778,7 @@ void resample(
823778
nn_renderer_t nn_renderer(renderer, span_alloc, span_conv);
824779
agg::render_scanlines(rasterizer, scanline, nn_renderer);
825780
} else {
826-
typedef typename type_mapping_t::template span_gen_nn_type<image_accessor_t, arbitrary_interpolator_t>::type span_gen_t;
781+
typedef typename type_mapping_t::template span_gen_nn_type<image_accessor_t, arbitrary_interpolator_t> span_gen_t;
827782
typedef agg::span_converter<span_gen_t, span_conv_alpha_t> span_conv_t;
828783
typedef agg::renderer_scanline_aa<renderer_t, span_alloc_t, span_conv_t> nn_renderer_t;
829784

@@ -840,7 +795,7 @@ void resample(
840795
get_filter(params, filter);
841796

842797
if (params.is_affine && params.resample) {
843-
typedef typename type_mapping_t::template span_gen_affine_type<image_accessor_t>::type span_gen_t;
798+
typedef typename type_mapping_t::template span_gen_affine_type<image_accessor_t> span_gen_t;
844799
typedef agg::span_converter<span_gen_t, span_conv_alpha_t> span_conv_t;
845800
typedef agg::renderer_scanline_aa<renderer_t, span_alloc_t, span_conv_t> int_renderer_t;
846801

@@ -850,7 +805,7 @@ void resample(
850805
int_renderer_t int_renderer(renderer, span_alloc, span_conv);
851806
agg::render_scanlines(rasterizer, scanline, int_renderer);
852807
} else {
853-
typedef typename type_mapping_t::template span_gen_filter_type<image_accessor_t, arbitrary_interpolator_t>::type span_gen_t;
808+
typedef typename type_mapping_t::template span_gen_filter_type<image_accessor_t, arbitrary_interpolator_t> span_gen_t;
854809
typedef agg::span_converter<span_gen_t, span_conv_alpha_t> span_conv_t;
855810
typedef agg::renderer_scanline_aa<renderer_t, span_alloc_t, span_conv_t> int_renderer_t;
856811

0 commit comments

Comments
 (0)
0