Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
Olena
pylene
Commits
b24d354a
Commit
b24d354a
authored
Dec 10, 2018
by
Michaël Roynard
Browse files
Write writable archetypes for images
Fix archetypes name + writable concepts
parent
6cfbc4de
Changes
13
Hide whitespace changes
Inline
Side-by-side
pylene/include/mln/core/concept/new/archetype/domain.hpp
View file @
b24d354a
...
...
@@ -4,13 +4,13 @@
#include
<mln/core/concept/new/domains.hpp>
namespace
mln
::
concepts
::
archetype
namespace
mln
::
archetype
s
{
struct
d
omain
_archetype
final
struct
D
omain
final
{
using
value_type
=
p
oint
_archetype
;
using
reference
=
p
oint
_archetype
&
;
using
value_type
=
P
oint
;
using
reference
=
P
oint
&
;
value_type
*
begin
();
value_type
*
end
();
...
...
@@ -21,7 +21,7 @@ namespace mln::concepts::archetype
};
#ifdef PYLENE_CONCEPT_TS_ENABLED
static_assert
(
Domain
<
d
omain
_archetype
>
,
"
d
omain
_
archetype does not model the Domain concept!"
);
static_assert
(
mln
::
concepts
::
Domain
<
D
omain
>
,
"
D
omain
archetype does not model the Domain concept!"
);
#endif // PYLENE_CONCEPT_TS_ENABLED
}
// namespace mln::
concepts::
archetype
}
// namespace mln::archetype
s
pylene/include/mln/core/concept/new/archetype/image.hpp
View file @
b24d354a
...
...
@@ -11,37 +11,35 @@
#include
<type_traits>
namespace
mln
::
concepts
::
archetype
namespace
mln
::
archetype
s
{
struct
i
mage
_archetype
;
struct
I
mage
;
struct
i
mage
_archetype
final
struct
I
mage
{
using
new_pixel_type
=
p
ixel
_archetype
;
using
value_type
=
pixel_value_t
<
p
ixel
_archetype
>
;
using
reference
=
pixel_reference_t
<
p
ixel
_archetype
>
;
using
new_point_type
=
domain_point_t
<
d
omain
_archetype
>
;
using
domain_type
=
d
omain
_archetype
;
using
new_pixel_type
=
P
ixel
;
using
value_type
=
pixel_value_t
<
P
ixel
>
;
using
reference
=
pixel_reference_t
<
P
ixel
>
;
using
new_point_type
=
domain_point_t
<
D
omain
>
;
using
domain_type
=
D
omain
;
using
category_type
=
forward_image_tag
;
using
concrete_type
=
i
mage
_archetype
;
using
concrete_type
=
I
mage
;
#ifdef PYLENE_CONCEPT_TS_ENABLED
template
<
Value
Val
>
template
<
mln
::
concepts
::
Value
Val
>
#else
template
<
typename
Val
>
#endif // PYLENE_CONCEPT_TS_ENABLED
using
ch_value_type
=
i
mage
_archetype
;
using
ch_value_type
=
I
mage
;
// additional traits
using
extension_category
=
mln
::
extension
::
none_extension_tag
;
using
indexable
=
std
::
false_type
;
using
accessible
=
std
::
false_type
;
using
bidirectional
=
std
::
false_type
;
using
raw
=
std
::
false_type
;
#ifdef PYLENE_CONCEPT_TS_ENABLED
template
<
Value
Val
>
template
<
mln
::
concepts
::
Value
Val
>
#else
template
<
typename
Val
>
#endif // PYLENE_CONCEPT_TS_ENABLED
...
...
@@ -50,30 +48,274 @@ namespace mln::concepts::archetype
domain_type
domain
()
const
;
struct
p
ixel
_r
ange
_archetype
final
struct
P
ixel
R
ange
{
using
value_type
=
new_pixel_type
;
using
reference
=
new_pixel_type
&
;
using
value_type
=
image_pixel_t
<
Image
>
;
using
reference
=
image_pixel_t
<
Image
>&
;
new_pixel_type
*
begin
();
new_pixel_type
*
end
();
};
PixelRange
new_pixels
();
struct
ValueRange
{
using
value_type
=
image_value_t
<
Image
>
;
using
reference
=
image_reference_t
<
Image
>
;
image_value_t
<
Image
>*
begin
();
image_value_t
<
Image
>*
end
();
};
ValueRange
new_values
();
};
#ifdef PYLENE_CONCEPT_TS_ENABLED
static_assert
(
mln
::
concepts
::
Image
<
Image
>
,
"Image archetype does not model the Image concept!"
);
#endif // PYLENE_CONCEPT_TS_ENABLED
struct
OutputImage
final
:
Image
{
using
new_pixel_type
=
OutputPixel
;
struct
OutputPixelRange
final
{
using
value_type
=
image_pixel_t
<
OutputImage
>
;
using
reference
=
image_pixel_t
<
OutputImage
>&
;
new_pixel_type
*
begin
();
new_pixel_type
*
end
();
};
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
struct
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
struct
ForwardImage
final
:
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
struct
IndexableImage
:
Image
{
using
index_type
=
int
;
using
indexable
=
std
::
true_type
;
image_reference_t
<
IndexableImage
>
operator
[](
image_index_t
<
IndexableImage
>
)
const
;
image_point_t
<
IndexableImage
>
point_of_index
(
image_index_t
<
IndexableImage
>
)
const
;
image_index_t
<
IndexableImage
>
index_at_point
(
image_point_t
<
IndexableImage
>
)
const
;
image_index_t
<
IndexableImage
>
delta_index
(
image_point_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
struct
OutputIndexableImage
final
:
IndexableImage
{
using
IndexableImage
::
operator
[];
image_reference_t
<
OutputIndexableImage
>
operator
[](
image_index_t
<
OutputIndexableImage
>
);
};
#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
struct
AccessibleImage
:
Image
{
using
accessible
=
std
::
true_type
;
image_reference_t
<
AccessibleImage
>
operator
()(
image_point_t
<
AccessibleImage
>
)
const
;
image_reference_t
<
AccessibleImage
>
at
(
image_point_t
<
AccessibleImage
>
)
const
;
image_pixel_t
<
AccessibleImage
>
new_pixel
(
image_point_t
<
AccessibleImage
>
)
const
;
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
struct
OutputAccessibleImage
final
:
AccessibleImage
{
using
AccessibleImage
::
operator
();
image_reference_t
<
OutputAccessibleImage
>
operator
[](
image_point_t
<
OutputAccessibleImage
>
);
using
AccessibleImage
::
at
;
image_reference_t
<
OutputAccessibleImage
>
at
(
image_point_t
<
OutputAccessibleImage
>
);
};
#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
struct
BidirectionalImage
:
Image
{
using
category_type
=
bidirectional_image_tag
;
struct
ReversiblePixelRange
final
:
Image
::
PixelRange
{
Image
::
PixelRange
reversed
();
};
ReversiblePixelRange
new_pixels
();
struct
ReversibleValueRange
final
:
Image
::
ValueRange
{
Image
::
ValueRange
reversed
();
};
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
struct
OutputBidirectionalImage
:
BidirectionalImage
{
using
new_pixel_type
=
OutputPixel
;
struct
OutputPixelRange
{
using
value_type
=
image_pixel_t
<
OutputBidirectionalImage
>
;
using
reference
=
image_pixel_t
<
OutputBidirectionalImage
>&
;
new_pixel_type
*
begin
();
new_pixel_type
*
end
();
};
pixel_range_archetype
new_pixels
();
struct
ReversibleOutputPixelRange
final
:
OutputPixelRange
{
OutputPixelRange
reversed
();
};
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
struct
value_range_archetype
final
struct
RawImage
:
Image
{
using
category_type
=
raw_image_tag
;
using
index_type
=
int
;
using
indexable
=
std
::
true_type
;
using
accessible
=
std
::
true_type
;
image_reference_t
<
RawImage
>
operator
[](
image_index_t
<
RawImage
>
)
const
;
image_point_t
<
RawImage
>
point_of_index
(
image_index_t
<
RawImage
>
)
const
;
image_index_t
<
RawImage
>
index_at_point
(
image_point_t
<
RawImage
>
)
const
;
image_index_t
<
RawImage
>
delta_index
(
image_point_t
<
RawImage
>
)
const
;
image_reference_t
<
RawImage
>
operator
()(
image_point_t
<
RawImage
>
)
const
;
image_reference_t
<
RawImage
>
at
(
image_point_t
<
RawImage
>
)
const
;
image_pixel_t
<
RawImage
>
new_pixel
(
image_point_t
<
RawImage
>
)
const
;
image_pixel_t
<
RawImage
>
new_pixel_at
(
image_point_t
<
RawImage
>
)
const
;
struct
ReversiblePixelRange
final
:
Image
::
PixelRange
{
Image
::
PixelRange
reversed
();
};
ReversiblePixelRange
new_pixels
();
struct
ReversibleValueRange
final
:
Image
::
ValueRange
{
Image
::
ValueRange
reversed
();
};
ReversibleValueRange
new_values
();
const
image_value_t
<
RawImage
>*
data
()
const
;
std
::
size_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
struct
OutputRawImage
final
:
RawImage
{
using
new_pixel_type
=
OutputPixel
;
using
RawImage
::
operator
[];
image_reference_t
<
OutputRawImage
>
operator
[](
image_index_t
<
OutputRawImage
>
);
using
RawImage
::
operator
();
image_reference_t
<
OutputRawImage
>
operator
[](
image_point_t
<
OutputRawImage
>
);
using
RawImage
::
at
;
image_reference_t
<
OutputRawImage
>
at
(
image_point_t
<
OutputRawImage
>
);
// Need to be redefined as pixel_type has changed
image_pixel_t
<
OutputRawImage
>
new_pixel
(
image_point_t
<
OutputRawImage
>
)
const
;
image_pixel_t
<
OutputRawImage
>
new_pixel_at
(
image_point_t
<
OutputRawImage
>
)
const
;
struct
OutputPixelRange
{
using
value_type
=
image_value_t
<
image_archetype
>
;
using
reference
=
image_reference_t
<
image_archetype
>
;
image_value_t
<
image_archetype
>*
begin
();
image_value_t
<
image_archetype
>*
end
();
using
value_type
=
image_pixel_t
<
OutputRawImage
>
;
using
reference
=
image_pixel_t
<
OutputRawImage
>&
;
new_pixel_type
*
begin
();
new_pixel_type
*
end
();
};
struct
ReversibleOutputPixelRange
final
:
OutputPixelRange
{
OutputPixelRange
reversed
();
};
value_range_archetype
new_values
();
ReversibleOutputPixelRange
new_pixels
();
using
RawImage
::
data
;
image_value_t
<
OutputRawImage
>*
data
();
};
#ifdef PYLENE_CONCEPT_TS_ENABLED
static_assert
(
Image
<
image_archetype
>
,
"image_archetype does not model the Image concept!"
);
#endif // #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
}
// namespace mln::concepts::archetype
\ No newline at end of file
}
// namespace mln::archetypes
pylene/include/mln/core/concept/new/archetype/index.hpp
View file @
b24d354a
...
...
@@ -3,13 +3,13 @@
#include
<mln/core/concept/new/indexes.hpp>
namespace
mln
::
concepts
::
archetype
namespace
mln
::
archetype
s
{
using
i
ndex
_archetype
=
int
;
using
I
ndex
=
int
;
#ifdef PYLENE_CONCEPT_TS_ENABLED
static_assert
(
Index
<
i
ndex
_archetype
>
,
"
i
ndex
_
archetype does not model the Index concept!"
);
static_assert
(
mln
::
concepts
::
Index
<
I
ndex
>
,
"
I
ndex
archetype does not model the Index concept!"
);
#endif // PYLENE_CONCEPT_TS_ENABLED
}
// namespace mln::
concepts::
archetype
}
// namespace mln::archetype
s
pylene/include/mln/core/concept/new/archetype/pixel.hpp
View file @
b24d354a
...
...
@@ -5,24 +5,36 @@
#include
<mln/core/concept/new/pixels.hpp>
namespace
mln
::
concepts
::
archetype
namespace
mln
::
archetype
s
{
struct
p
ixel
_archetype
final
struct
P
ixel
{
using
value_type
=
v
alue
_archetype
;
using
point_type
=
p
oint
_archetype
;
using
reference
=
v
alue
_archetype
&
;
using
value_type
=
V
alue
;
using
point_type
=
P
oint
;
using
reference
=
V
alue
&
;
point_type
point
()
const
;
reference
val
()
const
;
};
bool
operator
==
(
const
p
ixel
_archetype
&
lhs
,
const
p
ixel
_archetype
&
rhs
);
bool
operator
!=
(
const
p
ixel
_archetype
&
lhs
,
const
p
ixel
_archetype
&
rhs
);
bool
operator
==
(
const
P
ixel
&
lhs
,
const
P
ixel
&
rhs
);
bool
operator
!=
(
const
P
ixel
&
lhs
,
const
P
ixel
&
rhs
);
#ifdef PYLENE_CONCEPT_TS_ENABLED
static_assert
(
Pixel
<
p
ixel
_archetype
>
,
"
p
ixel
_
archetype does not model the Pixel concept!"
);
static_assert
(
mln
::
concepts
::
Pixel
<
P
ixel
>
,
"
P
ixel
archetype does not model the Pixel concept!"
);
#endif // PYLENE_CONCEPT_TS_ENABLED
}
// namespace mln::concepts::archetype
struct
OutputPixel
final
:
Pixel
{
using
Pixel
::
val
;
reference
val
();
};
#ifdef PYLENE_CONCEPT_TS_ENABLED
static_assert
(
mln
::
concepts
::
OutputPixel
<
OutputPixel
>
,
"OutputPixel archetype does not model the OutputPixel concept!"
);
#endif // PYLENE_CONCEPT_TS_ENABLED
}
// namespace mln::archetypes
pylene/include/mln/core/concept/new/archetype/point.hpp
View file @
b24d354a
...
...
@@ -3,22 +3,22 @@
#include
<mln/core/concept/new/points.hpp>
namespace
mln
::
concepts
::
archetype
namespace
mln
::
archetype
s
{
struct
p
oint
_archetype
final
struct
P
oint
final
{
};
bool
operator
==
(
const
p
oint
_archetype
&
,
const
p
oint
_archetype
&
);
bool
operator
!=
(
const
p
oint
_archetype
&
,
const
p
oint
_archetype
&
);
bool
operator
<
(
const
p
oint
_archetype
&
,
const
p
oint
_archetype
&
);
bool
operator
>
(
const
p
oint
_archetype
&
,
const
p
oint
_archetype
&
);
bool
operator
<=
(
const
p
oint
_archetype
&
,
const
p
oint
_archetype
&
);
bool
operator
>=
(
const
p
oint
_archetype
&
,
const
p
oint
_archetype
&
);
bool
operator
==
(
const
P
oint
&
,
const
P
oint
&
);
bool
operator
!=
(
const
P
oint
&
,
const
P
oint
&
);
bool
operator
<
(
const
P
oint
&
,
const
P
oint
&
);
bool
operator
>
(
const
P
oint
&
,
const
P
oint
&
);
bool
operator
<=
(
const
P
oint
&
,
const
P
oint
&
);
bool
operator
>=
(
const
P
oint
&
,
const
P
oint
&
);
#ifdef PYLENE_CONCEPT_TS_ENABLED
static_assert
(
Point
<
p
oint
_archetype
>
,
"
p
oint
_
archetype does not model the Point concept!"
);
static_assert
(
mln
::
concepts
::
Point
<
P
oint
>
,
"
P
oint
archetype does not model the Point concept!"
);
#endif // PYLENE_CONCEPT_TS_ENABLED
}
// namespace mln::
concepts::
archetype
}
// namespace mln::archetype
s
pylene/include/mln/core/concept/new/archetype/range.hpp
View file @
b24d354a
...
...
@@ -3,77 +3,77 @@
#include
<mln/core/concept/new/archetype/value.hpp>
#include
<mln/core/concept/new/ranges.hpp>
namespace
mln
::
concepts
::
archetype
namespace
mln
::
archetype
s
{
namespace
detail
{
struct
r
andom
a
ccess
_r
ange
_archetype
struct
R
andom
A
ccess
R
ange
{
using
value_type
=
v
alue
_archetype
;
using
reference
=
v
alue
_archetype
&
;
using
value_type
=
V
alue
;
using
reference
=
V
alue
&
;
value_type
*
begin
();
value_type
*
end
();
};
#ifdef PYLENE_CONCEPT_TS_ENABLED
static_assert
(
stl
::
RandomAccessRange
<
r
andom
a
ccess
_r
ange
_archetype
>
,
"
r
andom
a
ccess
_r
ange
_
archetype does not model the stl::RandomAccessRange concept!"
);
static_assert
(
mln
::
concepts
::
stl
::
RandomAccessRange
<
R
andom
A
ccess
R
ange
>
,
"
R
andom
A
ccess
R
ange
archetype does not model the stl::RandomAccessRange concept!"
);
#endif // PYLENE_CONCEPT_TS_ENABLED
}
// namespace detail
struct
s
egmented
_r
ange
_archetype
final
:
detail
::
r
andom
a
ccess
_r
ange
_archetype
struct
S
egmented
R
ange
final
:
detail
::
R
andom
A
ccess
R
ange
{
struct
n
ested
_s
egmented
_r
ange
_archetype
final
struct
N
ested
S
egmented
R
ange
final
{
using
value_type
=
detail
::
r
andom
a
ccess
_r
ange
_archetype
;
using
reference
=
detail
::
r
andom
a
ccess
_r
ange
_archetype
&
;
using
value_type
=
detail
::
R
andom
A
ccess
R
ange
;
using
reference
=
detail
::
R
andom
A
ccess
R
ange
&
;
detail
::
r
andom
a
ccess
_r
ange
_archetype
*
begin
();
detail
::
r
andom
a
ccess
_r
ange
_archetype
*
end
();
detail
::
R
andom
A
ccess
R
ange
*
begin
();
detail
::
R
andom
A
ccess
R
ange
*
end
();
};
n
ested
_s
egmented
_r
ange
_archetype
rows
();
N
ested
S
egmented
R
ange
rows
();
};
#ifdef PYLENE_CONCEPT_TS_ENABLED
static_assert
(
SegmentedRange
<
s
egmented
_r
ange
_archetype
>
,
"
s
egmented
_r
ange
_
archetype does not model the SegmentedRange concept!"
);
static_assert
(
mln
::
concepts
::
SegmentedRange
<
S
egmented
R
ange
>
,
"
S
egmented
R
ange
archetype does not model the SegmentedRange concept!"
);
#endif // PYLENE_CONCEPT_TS_ENABLED
struct
r
eversible
_r
ange
_archetype
final
:
detail
::
r
andom
a
ccess
_r
ange
_archetype
struct
R
eversible
R
ange
final
:
detail
::
R
andom
A
ccess
R
ange
{
detail
::
r
andom
a
ccess
_r
ange
_archetype
reversed
();
detail
::
R
andom
A
ccess
R
ange
reversed
();
};
#ifdef PYLENE_CONCEPT_TS_ENABLED
static_assert
(
ReversibleRange
<
r
eversible
_r
ange
_archetype
>
,
static_assert
(
mln
::
concepts
::
ReversibleRange
<
R
eversible
R
ange
>
,
"reversible_range_archetype does not model the ReversibleRange concept!"
);
#endif // PYLENE_CONCEPT_TS_ENABLED
struct
s
egmented
_and_r
eversible
_r
ange
_archetype
final
:
detail
::
r
andom
a
ccess
_r
ange
_archetype
struct
S
egmented
AndR
eversible
R
ange
final
:
detail
::
R
andom
A
ccess
R
ange
{
struct
n
ested
_s
egmented
_r
ange
_archetype
final
struct
N
ested
S
egmented
R
ange
final
{
using
value_type
=
detail
::
r
andom
a
ccess
_r
ange
_archetype
;
using
reference
=
detail
::
r
andom
a
ccess
_r
ange
_archetype
&
;
detail
::
r
andom
a
ccess
_r
ange
_archetype
*
begin
();
detail
::
r
andom
a
ccess
_r
ange
_archetype
*
end
();
using
value_type
=
detail
::
R
andom
A
ccess
R
ange
;
using
reference
=
detail
::
R
andom
A
ccess
R
ange
&
;
detail
::
R
andom
A
ccess
R
ange
*
begin
();
detail
::
R
andom
A
ccess
R
ange
*
end
();
};
n
ested
_s
egmented
_r
ange
_archetype
rows
();
detail
::
r
andom
a
ccess
_r
ange
_archetype
reversed
();
N
ested
S
egmented
R
ange
rows
();
detail
::
R
andom
A
ccess
R
ange
reversed
();
};
#ifdef PYLENE_CONCEPT_TS_ENABLED
static_assert
(
SegmentedRange
<
s
egmented
_and_r
eversible
_r
ange
_archetype
>
,
"
s
egmented
_and_r
eversible
_r
ange
_
archetype does not model the SegmentedRange concept!"
);
static_assert
(
ReversibleRange
<
s
egmented
_and_r
eversible
_r
ange
_archetype
>
,
"
s
egmented
_and_r
eversible
_r
ange
_
archetype does not model the ReversibleRange concept!"
);
static_assert
(
mln
::
concepts
::
SegmentedRange
<
S
egmented
AndR
eversible
R
ange
>
,
"
S
egmented
AndR
eversible
R
ange
archetype does not model the SegmentedRange concept!"
);
static_assert
(
mln
::
concepts
::
ReversibleRange
<
S
egmented
AndR
eversible
R
ange
>
,
"
S
egmented
AndR
eversible
R
ange
archetype does not model the ReversibleRange concept!"
);
#endif // PYLENE_CONCEPT_TS_ENABLED
}
// namespace mln::
concepts::
archetype
}
// namespace mln::archetype
s
pylene/include/mln/core/concept/new/archetype/value.hpp
View file @
b24d354a
...
...
@@ -3,43 +3,43 @@
#include
<mln/core/concept/new/values.hpp>
namespace
mln
::
concepts
::
archetype
namespace
mln
::
archetype
s
{
struct
v
alue
_archetype
final
struct
V
alue
final
{
};
<