Commit e6a5e473 authored by Michaël Roynard's avatar Michaël Roynard
Browse files

Update filter (impl)

Update concept checking strategy
parent d289350d
Pipeline #12868 failed with stages
in 5 minutes and 40 seconds
#pragma once
#include <mln/core/concept/new/archetype/point.hpp>
#include <mln/core/concept/new/check.hpp>
#include <mln/core/concept/new/domains.hpp>
......@@ -19,18 +20,14 @@ namespace mln::archetypes
bool empty() const;
};
#ifdef PYLENE_CONCEPT_TS_ENABLED
static_assert(mln::concepts::Domain<Domain>, "Domain archetype does not model the Domain concept!");
#endif // PYLENE_CONCEPT_TS_ENABLED
PYLENE_CONCEPT_TS_ASSERT(mln::concepts::Domain<Domain>, "Domain archetype does not model the Domain concept!");
struct SizedDomain : Domain
struct SizedDomain final : Domain
{
unsigned size() const;
};
#ifdef PYLENE_CONCEPT_TS_ENABLED
static_assert(mln::concepts::SizedDomain<SizedDomain>,
"SizedDomain archetype does not model the SizedDomain concept!");
#endif // PYLENE_CONCEPT_TS_ENABLED
PYLENE_CONCEPT_TS_ASSERT(mln::concepts::SizedDomain<SizedDomain>,
"SizedDomain archetype does not model the SizedDomain concept!");
} // namespace mln::archetypes
......@@ -2,6 +2,7 @@
#include <mln/core/concept/new/archetype/domain.hpp>
#include <mln/core/concept/new/archetype/pixel.hpp>
#include <mln/core/concept/new/check.hpp>
#include <mln/core/concept/new/images.hpp>
#include <mln/core/domain/private/domain_traits.hpp>
......@@ -81,10 +82,8 @@ namespace mln::archetypes
ValueRange new_values();
};
#ifdef PYLENE_CONCEPT_TS_ENABLED
static_assert(mln::concepts::ConcreteImage<ConcreteImage>,
"ConcreteImage archetype does not model the ConcreteImage concept!");
#endif // PYLENE_CONCEPT_TS_ENABLED
PYLENE_CONCEPT_TS_ASSERT(mln::concepts::ConcreteImage<ConcreteImage>,
"ConcreteImage archetype does not model the ConcreteImage concept!");
struct ViewImage : ConcreteImage, mln::experimental::Image<ViewImage>
......@@ -98,16 +97,13 @@ namespace mln::archetypes
ViewImage& operator=(ViewImage&&) = delete;
};
#ifdef PYLENE_CONCEPT_TS_ENABLED
static_assert(mln::concepts::ViewImage<ViewImage>, "ViewImage archetype does not model the ViewImage concept!");
#endif // PYLENE_CONCEPT_TS_ENABLED
PYLENE_CONCEPT_TS_ASSERT(mln::concepts::ViewImage<ViewImage>,
"ViewImage archetype does not model the ViewImage concept!")
using Image = ViewImage;
#ifdef PYLENE_CONCEPT_TS_ENABLED
static_assert(mln::concepts::Image<Image>, "Image archetype does not model the Image concept!");
#endif // PYLENE_CONCEPT_TS_ENABLED
PYLENE_CONCEPT_TS_ASSERT(mln::concepts::Image<Image>, "Image archetype does not model the Image concept!");
struct OutputImage : Image, mln::experimental::Image<OutputImage>
......@@ -128,33 +124,27 @@ namespace mln::archetypes
OutputPixelRange new_pixels();
};
#ifdef PYLENE_CONCEPT_TS_ENABLED
static_assert(mln::concepts::Image<OutputImage> && mln::concepts::OutputImage<OutputImage>,
"OuputImage archetype does not model the OuputImage concept!");
#endif // PYLENE_CONCEPT_TS_ENABLED
PYLENE_CONCEPT_TS_ASSERT(mln::concepts::Image<OutputImage>&& mln::concepts::OutputImage<OutputImage>,
"OuputImage archetype does not model the OuputImage concept!");
using InputImage = Image;
#ifdef PYLENE_CONCEPT_TS_ENABLED
static_assert(mln::concepts::InputImage<InputImage>, "InputImage archetype does not model the InputImage concept!");
#endif // PYLENE_CONCEPT_TS_ENABLED
PYLENE_CONCEPT_TS_ASSERT(mln::concepts::InputImage<InputImage>,
"InputImage archetype does not model the InputImage concept!");
using ForwardImage = InputImage;
#ifdef PYLENE_CONCEPT_TS_ENABLED
static_assert(mln::concepts::ForwardImage<ForwardImage>,
"ForwardImage archetype does not model the ForwardImage concept!");
#endif // PYLENE_CONCEPT_TS_ENABLED
PYLENE_CONCEPT_TS_ASSERT(mln::concepts::ForwardImage<ForwardImage>,
"ForwardImage archetype does not model the ForwardImage concept!");
using OutputForwardImage = OutputImage;
#ifdef PYLENE_CONCEPT_TS_ENABLED
static_assert(mln::concepts::ForwardImage<OutputForwardImage> && mln::concepts::OutputImage<OutputForwardImage>,
"OutputForwardImage archetype does not model the OutputImage concept!");
#endif // PYLENE_CONCEPT_TS_ENABLED
PYLENE_CONCEPT_TS_ASSERT(
mln::concepts::ForwardImage<OutputForwardImage>&& mln::concepts::OutputImage<OutputForwardImage>,
"OutputForwardImage archetype does not model the OutputImage concept!");
struct IndexableImage : Image, mln::experimental::Image<IndexableImage>
......@@ -165,10 +155,8 @@ namespace mln::archetypes
image_reference_t<IndexableImage> operator[](image_index_t<IndexableImage>) const;
};
#ifdef PYLENE_CONCEPT_TS_ENABLED
static_assert(mln::concepts::IndexableImage<IndexableImage>,
"IndexableImage archetype does not model the IndexableImage concept!");
#endif // PYLENE_CONCEPT_TS_ENABLED
PYLENE_CONCEPT_TS_ASSERT(mln::concepts::IndexableImage<IndexableImage>,
"IndexableImage archetype does not model the IndexableImage concept!");
struct OutputIndexableImage final : IndexableImage, mln::experimental::Image<OutputIndexableImage>
......@@ -193,10 +181,9 @@ namespace mln::archetypes
};
#ifdef PYLENE_CONCEPT_TS_ENABLED
static_assert(mln::concepts::IndexableImage<OutputIndexableImage> && mln::concepts::OutputImage<OutputIndexableImage>,
"OutputIndexableImage archetype does not model the OutputImage concept!");
#endif // PYLENE_CONCEPT_TS_ENABLED
PYLENE_CONCEPT_TS_ASSERT(
mln::concepts::IndexableImage<OutputIndexableImage>&& mln::concepts::OutputImage<OutputIndexableImage>,
"OutputIndexableImage archetype does not model the OutputImage concept!");
struct AccessibleImage : Image, mln::experimental::Image<AccessibleImage>
......@@ -209,10 +196,8 @@ namespace mln::archetypes
image_pixel_t<AccessibleImage> new_pixel_at(image_point_t<AccessibleImage>) const;
};
#ifdef PYLENE_CONCEPT_TS_ENABLED
static_assert(mln::concepts::AccessibleImage<AccessibleImage>,
"AccessibleImage archetype does not model the AccessibleImage concept!");
#endif // PYLENE_CONCEPT_TS_ENABLED
PYLENE_CONCEPT_TS_ASSERT(mln::concepts::AccessibleImage<AccessibleImage>,
"AccessibleImage archetype does not model the AccessibleImage concept!");
struct OutputAccessibleImage : AccessibleImage, mln::experimental::Image<OutputAccessibleImage>
......@@ -241,11 +226,9 @@ namespace mln::archetypes
OutputPixelRange new_pixels();
};
#ifdef PYLENE_CONCEPT_TS_ENABLED
static_assert(mln::concepts::AccessibleImage<OutputAccessibleImage> &&
mln::concepts::OutputImage<OutputAccessibleImage>,
"OutputAccessibleImage archetype does not model the OutputImage concept!");
#endif // PYLENE_CONCEPT_TS_ENABLED
PYLENE_CONCEPT_TS_ASSERT(
mln::concepts::AccessibleImage<OutputAccessibleImage>&& mln::concepts::OutputImage<OutputAccessibleImage>,
"OutputAccessibleImage archetype does not model the OutputImage concept!");
struct IndexableAndAccessibleImage : AccessibleImage, mln::experimental::Image<IndexableAndAccessibleImage>
......@@ -260,13 +243,13 @@ namespace mln::archetypes
image_index_t<IndexableAndAccessibleImage> delta_index(image_point_t<IndexableAndAccessibleImage>) const;
};
#ifdef PYLENE_CONCEPT_TS_ENABLED
static_assert(mln::concepts::IndexableAndAccessibleImage<IndexableAndAccessibleImage>,
"IndexableAndAccessibleImage archetype does not model the IndexableAndAccessibleImage concept!");
#endif // PYLENE_CONCEPT_TS_ENABLED
PYLENE_CONCEPT_TS_ASSERT(
mln::concepts::IndexableAndAccessibleImage<IndexableAndAccessibleImage>,
"IndexableAndAccessibleImage archetype does not model the IndexableAndAccessibleImage concept!");
struct OutputIndexableAndAccessibleImage : OutputAccessibleImage, mln::experimental::Image<OutputIndexableAndAccessibleImage>
struct OutputIndexableAndAccessibleImage : OutputAccessibleImage,
mln::experimental::Image<OutputIndexableAndAccessibleImage>
{
using index_type = int;
using indexable = std::true_type;
......@@ -283,11 +266,9 @@ namespace mln::archetypes
delta_index(image_point_t<OutputIndexableAndAccessibleImage>) const;
};
#ifdef PYLENE_CONCEPT_TS_ENABLED
static_assert(mln::concepts::IndexableAndAccessibleImage<OutputIndexableAndAccessibleImage> &&
mln::concepts::OutputImage<OutputIndexableAndAccessibleImage>,
"OutputIndexableAndAccessibleImage archetype does not model the OutputImage concept!");
#endif // PYLENE_CONCEPT_TS_ENABLED
PYLENE_CONCEPT_TS_ASSERT(mln::concepts::IndexableAndAccessibleImage<OutputIndexableAndAccessibleImage>&&
mln::concepts::OutputImage<OutputIndexableAndAccessibleImage>,
"OutputIndexableAndAccessibleImage archetype does not model the OutputImage concept!");
struct BidirectionalImage : Image, mln::experimental::Image<BidirectionalImage>
......@@ -309,10 +290,8 @@ namespace mln::archetypes
ReversibleValueRange new_values();
};
#ifdef PYLENE_CONCEPT_TS_ENABLED
static_assert(mln::concepts::BidirectionalImage<BidirectionalImage>,
"BidirectionalImage archetype does not model the BidirectionalImage concept!");
#endif // PYLENE_CONCEPT_TS_ENABLED
PYLENE_CONCEPT_TS_ASSERT(mln::concepts::BidirectionalImage<BidirectionalImage>,
"BidirectionalImage archetype does not model the BidirectionalImage concept!");
struct OutputBidirectionalImage : BidirectionalImage, mln::experimental::Image<OutputBidirectionalImage>
......@@ -337,11 +316,9 @@ namespace mln::archetypes
ReversibleOutputPixelRange new_pixels();
};
#ifdef PYLENE_CONCEPT_TS_ENABLED
static_assert(mln::concepts::BidirectionalImage<OutputBidirectionalImage> &&
mln::concepts::OutputImage<OutputBidirectionalImage>,
"OutputBidirectionalImage archetype does not model the OutputImage concept!");
#endif // PYLENE_CONCEPT_TS_ENABLED
PYLENE_CONCEPT_TS_ASSERT(mln::concepts::BidirectionalImage<OutputBidirectionalImage>&&
mln::concepts::OutputImage<OutputBidirectionalImage>,
"OutputBidirectionalImage archetype does not model the OutputImage concept!");
struct RawImage : IndexableAndAccessibleImage, mln::experimental::Image<RawImage>
......@@ -368,9 +345,8 @@ namespace mln::archetypes
std::ptrdiff_t strides(int) const;
};
#ifdef PYLENE_CONCEPT_TS_ENABLED
static_assert(mln::concepts::RawImage<RawImage>, "RawImage archetype does not model the RawImage concept!");
#endif // PYLENE_CONCEPT_TS_ENABLED
PYLENE_CONCEPT_TS_ASSERT(mln::concepts::RawImage<RawImage>,
"RawImage archetype does not model the RawImage concept!");
struct OutputRawImage final : RawImage, mln::experimental::Image<OutputRawImage>
......@@ -413,10 +389,8 @@ namespace mln::archetypes
image_value_t<OutputRawImage>* data();
};
#ifdef PYLENE_CONCEPT_TS_ENABLED
static_assert(mln::concepts::RawImage<OutputRawImage> && mln::concepts::OutputImage<OutputRawImage>,
"OutputRawImage archetype does not model the OutputImage concept!");
#endif // PYLENE_CONCEPT_TS_ENABLED
PYLENE_CONCEPT_TS_ASSERT(mln::concepts::RawImage<OutputRawImage>&& mln::concepts::OutputImage<OutputRawImage>,
"OutputRawImage archetype does not model the OutputImage concept!");
struct WithExtensionImage : Image, mln::experimental::Image<WithExtensionImage>
......@@ -432,9 +406,7 @@ namespace mln::archetypes
image_extension_t<WithExtensionImage> extension() const;
};
#ifdef PYLENE_CONCEPT_TS_ENABLED
static_assert(mln::concepts::WithExtensionImage<WithExtensionImage>,
"WithExtensionImage archetype does not model the WithExtensionImage concept!");
#endif // PYLENE_CONCEPT_TS_ENABLED
PYLENE_CONCEPT_TS_ASSERT(mln::concepts::WithExtensionImage<WithExtensionImage>,
"WithExtensionImage archetype does not model the WithExtensionImage concept!");
} // namespace mln::archetypes
#pragma once
#include <mln/core/concept/new/check.hpp>
#include <mln/core/concept/new/indexes.hpp>
......@@ -8,8 +9,6 @@ namespace mln::archetypes
using Index = int;
#ifdef PYLENE_CONCEPT_TS_ENABLED
static_assert(mln::concepts::Index<Index>, "Index archetype does not model the Index concept!");
#endif // PYLENE_CONCEPT_TS_ENABLED
PYLENE_CONCEPT_TS_ASSERT(mln::concepts::Index<Index>, "Index archetype does not model the Index concept!");
} // namespace mln::archetypes
......@@ -2,6 +2,7 @@
#include <mln/core/concept/new/archetype/point.hpp>
#include <mln/core/concept/new/archetype/value.hpp>
#include <mln/core/concept/new/check.hpp>
#include <mln/core/concept/new/pixels.hpp>
......@@ -24,9 +25,7 @@ namespace mln::archetypes
reference val() const;
};
#ifdef PYLENE_CONCEPT_TS_ENABLED
static_assert(mln::concepts::Pixel<Pixel>, "Pixel archetype does not model the Pixel concept!");
#endif // PYLENE_CONCEPT_TS_ENABLED
PYLENE_CONCEPT_TS_ASSERT(mln::concepts::Pixel<Pixel>, "Pixel archetype does not model the Pixel concept!");
struct OutputPixel final : Pixel
......@@ -36,9 +35,7 @@ namespace mln::archetypes
reference val() const;
};
#ifdef PYLENE_CONCEPT_TS_ENABLED
static_assert(mln::concepts::OutputPixel<OutputPixel>,
"OutputPixel archetype does not model the OutputPixel concept!");
#endif // PYLENE_CONCEPT_TS_ENABLED
PYLENE_CONCEPT_TS_ASSERT(mln::concepts::OutputPixel<OutputPixel>,
"OutputPixel archetype does not model the OutputPixel concept!");
} // namespace mln::archetypes
#pragma once
#include <mln/core/concept/new/check.hpp>
#include <mln/core/concept/new/points.hpp>
......@@ -17,8 +18,6 @@ namespace mln::archetypes
bool operator<=(const Point&, const Point&);
bool operator>=(const Point&, const Point&);
#ifdef PYLENE_CONCEPT_TS_ENABLED
static_assert(mln::concepts::Point<Point>, "Point archetype does not model the Point concept!");
#endif // PYLENE_CONCEPT_TS_ENABLED
PYLENE_CONCEPT_TS_ASSERT(mln::concepts::Point<Point>, "Point archetype does not model the Point concept!");
} // namespace mln::archetypes
#pragma once
#include <mln/core/concept/new/archetype/value.hpp>
#include <mln/core/concept/new/check.hpp>
#include <mln/core/concept/new/ranges.hpp>
namespace mln::archetypes
{
namespace detail
......@@ -16,10 +18,8 @@ namespace mln::archetypes
value_type* end();
};
#ifdef PYLENE_CONCEPT_TS_ENABLED
static_assert(mln::concepts::stl::RandomAccessRange<RandomAccessRange>,
"RandomAccessRange archetype does not model the stl::RandomAccessRange concept!");
#endif // PYLENE_CONCEPT_TS_ENABLED
PYLENE_CONCEPT_TS_ASSERT(mln::concepts::stl::RandomAccessRange<RandomAccessRange>,
"RandomAccessRange archetype does not model the stl::RandomAccessRange concept!");
} // namespace detail
......@@ -38,10 +38,8 @@ namespace mln::archetypes
NestedSegmentedRange rows();
};
#ifdef PYLENE_CONCEPT_TS_ENABLED
static_assert(mln::concepts::SegmentedRange<SegmentedRange>,
"SegmentedRange archetype does not model the SegmentedRange concept!");
#endif // PYLENE_CONCEPT_TS_ENABLED
PYLENE_CONCEPT_TS_ASSERT(mln::concepts::SegmentedRange<SegmentedRange>,
"SegmentedRange archetype does not model the SegmentedRange concept!");
struct ReversibleRange final : detail::RandomAccessRange
......@@ -49,10 +47,8 @@ namespace mln::archetypes
detail::RandomAccessRange reversed();
};
#ifdef PYLENE_CONCEPT_TS_ENABLED
static_assert(mln::concepts::ReversibleRange<ReversibleRange>,
"reversible_range_archetype does not model the ReversibleRange concept!");
#endif // PYLENE_CONCEPT_TS_ENABLED
PYLENE_CONCEPT_TS_ASSERT(mln::concepts::ReversibleRange<ReversibleRange>,
"reversible_range_archetype does not model the ReversibleRange concept!");
struct SegmentedAndReversibleRange final : detail::RandomAccessRange
......@@ -69,11 +65,9 @@ namespace mln::archetypes
detail::RandomAccessRange reversed();
};
#ifdef PYLENE_CONCEPT_TS_ENABLED
static_assert(mln::concepts::SegmentedRange<SegmentedAndReversibleRange>,
"SegmentedAndReversibleRange archetype does not model the SegmentedRange concept!");
static_assert(mln::concepts::ReversibleRange<SegmentedAndReversibleRange>,
"SegmentedAndReversibleRange archetype does not model the ReversibleRange concept!");
#endif // PYLENE_CONCEPT_TS_ENABLED
PYLENE_CONCEPT_TS_ASSERT(mln::concepts::SegmentedRange<SegmentedAndReversibleRange>,
"SegmentedAndReversibleRange archetype does not model the SegmentedRange concept!");
PYLENE_CONCEPT_TS_ASSERT(mln::concepts::ReversibleRange<SegmentedAndReversibleRange>,
"SegmentedAndReversibleRange archetype does not model the ReversibleRange concept!");
} // namespace mln::archetypes
#pragma once
#include <mln/core/concept/new/check.hpp>
#include <mln/core/concept/new/values.hpp>
......@@ -10,9 +11,7 @@ namespace mln::archetypes
{
};
#ifdef PYLENE_CONCEPT_TS_ENABLED
static_assert(mln::concepts::Value<Value>, "Value archetype does not model the Value concept!");
#endif // PYLENE_CONCEPT_TS_ENABLED
PYLENE_CONCEPT_TS_ASSERT(mln::concepts::Value<Value>, "Value archetype does not model the Value concept!");
struct ComparableValue final
......@@ -21,10 +20,8 @@ namespace mln::archetypes
bool operator==(const ComparableValue&, const ComparableValue&);
bool operator!=(const ComparableValue&, const ComparableValue&);
#ifdef PYLENE_CONCEPT_TS_ENABLED
static_assert(mln::concepts::ComparableValue<ComparableValue>,
"ComparableValue archetype does not model the ComparableValue concept!");
#endif // PYLENE_CONCEPT_TS_ENABLED
PYLENE_CONCEPT_TS_ASSERT(mln::concepts::ComparableValue<ComparableValue>,
"ComparableValue archetype does not model the ComparableValue concept!");
struct OrderedValue final
......@@ -37,9 +34,7 @@ namespace mln::archetypes
bool operator<=(const OrderedValue&, const OrderedValue&);
bool operator>=(const OrderedValue&, const OrderedValue&);
#ifdef PYLENE_CONCEPT_TS_ENABLED
static_assert(mln::concepts::OrderedValue<OrderedValue>,
"OrderedValue archetype does not model the OrderedValue concept!");
#endif // PYLENE_CONCEPT_TS_ENABLED
PYLENE_CONCEPT_TS_ASSERT(mln::concepts::OrderedValue<OrderedValue>,
"OrderedValue archetype does not model the OrderedValue concept!");
} // namespace mln::archetypes
#pragma once
// helper macro
#ifdef PYLENE_CONCEPT_TS_ENABLED
#define PYLENE_CONCEPT_TS_ASSERT(expr, mess) static_assert((expr), mess);
#else
#define PYLENE_CONCEPT_TS_ASSERT(expr, mess)
#endif // PYLENE_CONCEPT_TS_ENABLED
#pragma once
#include <mln/core/concept/new/check.hpp>
#include <mln/core/concept/new/cmcstl2.hpp>
#include <mln/core/concept/new/domains.hpp>
......
......@@ -17,7 +17,7 @@ namespace mln::concepts
#ifdef PYLENE_CONCEPT_TS_ENABLED
// Domain
template<typename Dom>
template <typename Dom>
concept Domain =
stl::ForwardRange<Dom> &&
stl::Same<domain_value_t<Dom>, domain_point_t<Dom>> &&
......@@ -30,8 +30,8 @@ namespace mln::concepts
// SizedDomain
template<typename Dom>
concept Domain =
template <typename Dom>
concept SizedDomain =
Domain<Dom> &&
requires(const Dom cdom) {
{ cdom.size() } -> stl::UnsignedIntegral&&;
......
......@@ -26,7 +26,7 @@ namespace mln::experimental
struct Image
{
};
}
} // namespace mln::experimental
namespace mln::concepts
{
......@@ -36,7 +36,7 @@ namespace mln::concepts
#ifdef PYLENE_CONCEPT_TS_ENABLED
// Image
template<typename I>
template <typename I>
concept Image =
// Minimum constraint on image object
// Do not requires DefaultConstructible
......@@ -87,7 +87,7 @@ namespace mln::concepts
{
// WritableImage
template<typename I>
template <typename I>
concept WritableImage =
Image<I> &&
OutputPixel<image_pixel_t<I>> &&
......@@ -130,7 +130,7 @@ namespace mln::concepts
{
// WritableIndexableImage
template<typename I>
template <typename I>
concept WritableIndexableImage =
WritableImage<I> &&
IndexableImage<I> &&
......@@ -158,7 +158,7 @@ namespace mln::concepts
{
// WritableAccessibleImage
template<typename I>
template <typename I>
concept WritableAccessibleImage =
detail::WritableImage<I> &&
AccessibleImage<I> &&
......@@ -186,7 +186,7 @@ namespace mln::concepts
{
// WritableIndexableAndAccessibleImage
template<typename I>
template <typename I>
concept WritableIndexableAndAccessibleImage =
IndexableAndAccessibleImage<I> &&
detail::WritableImage<I> &&
......@@ -210,7 +210,7 @@ namespace mln::concepts
{
// WritableBidirectionalImage
template<typename I>
template <typename I>
concept WritableBidirectionalImage =
WritableImage<I> &&
BidirectionalImage<I>;
......@@ -234,7 +234,7 @@ namespace mln::concepts
{
// WritableRawImage
template<typename I>
template <typename I>
concept WritableRawImage =
WritableImage<I> &&
WritableIndexableAndAccessibleImage<I> &&
......
......@@ -9,7 +9,7 @@ namespace mln::concepts
#ifdef PYLENE_CONCEPT_TS_ENABLED
// Index
template<typename Idx>
template <typename Idx>
// FIXME: switch to SignedIntegral when concept is consolidated
concept Index = /* stl::SignedIntegral<Idx>; */
stl::Integral<Idx>;
......
......@@ -16,7 +16,7 @@ namespace mln::concepts
#ifdef PYLENE_CONCEPT_TS_ENABLED
// Pixel
template<typename Pix>
template <typename Pix>
concept Pixel =
// Minimum constraint on image object
// Do not requires DefaultConstructible
......
......@@ -9,7 +9,7 @@ namespace mln::concepts
#ifdef PYLENE_CONCEPT_TS_ENABLED
// Point
template<typename Pnt>
template <typename Pnt>
concept Point =
stl::Regular<Pnt> &&
stl::StrictTotallyOrdered<Pnt>;
......
......@@ -30,7 +30,7 @@ namespace mln::concepts
// SegmentedRange
template<typename Rng>
template <typename Rng>
concept SegmentedRange =
stl::ForwardRange<Rng> &&
requires(Rng rng) {
......@@ -42,7 +42,7 @@ namespace mln::concepts
// ReversibleRange
template<typename Rng>
template <typename Rng>
concept ReversibleRange =
stl::ForwardRange<Rng> &&
requires(Rng rng) {
......
......@@ -50,7 +50,7 @@ namespace mln
public:
where_t(I ima)
: m_ima(std::move(ima))
: m_ima(ima)
, m_pixels(m_ima.new_pixels())
{
}
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment