1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122
|
/*=========================================================================
*
* Copyright Insight Software Consortium
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0.txt
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
*=========================================================================*/
#ifndef sitkPixelIDTokens_h
#define sitkPixelIDTokens_h
#include "sitkConfigure.h"
#include "sitkPixelIDValues.h"
#include "nsstd/type_traits.h"
namespace itk
{
namespace simple
{
typedef nsstd::true_type TrueType;
typedef nsstd::false_type FalseType;
template <typename TPixelIDType>
struct IsBasic
{
static const bool Value = FalseType::value;
typedef typename FalseType::value_type ValueType;
typedef typename FalseType::type Type;
};
template <typename TPixelType>
struct IsBasic< BasicPixelID<TPixelType> >
{
static const bool Value = TrueType::value;
typedef typename TrueType::value_type ValueType;
typedef typename TrueType::type Type;
};
template <typename TPixelType, unsigned int VImageDimension>
struct IsBasic< itk::Image< TPixelType, VImageDimension> >
: public IsBasic< typename ImageTypeToPixelID< itk::Image<TPixelType, VImageDimension> >::PixelIDType >
{};
template <typename TPixelIDType>
struct IsVector
{
static const bool Value = FalseType::value;
typedef typename FalseType::value_type ValueType;
typedef typename FalseType::type Type;
};
template <typename TPixelType>
struct IsVector< VectorPixelID<TPixelType> >
{
static const bool Value = TrueType::value;
typedef typename TrueType::value_type ValueType;
typedef typename TrueType::type Type;
};
template <typename TPixelType, unsigned int VImageDimension>
struct IsVector< itk::VectorImage< TPixelType, VImageDimension> >
: public IsVector< typename ImageTypeToPixelID< itk::VectorImage<TPixelType, VImageDimension> >::PixelIDType >
{};
template <typename TPixelIDType>
struct IsLabel
{
static const bool Value = FalseType::value;
typedef typename FalseType::value_type ValueType;
typedef typename FalseType::type Type;
};
template <typename TPixelType>
struct IsLabel< LabelPixelID<TPixelType> >
{
static const bool Value = TrueType::value;
typedef typename TrueType::value_type ValueType;
typedef typename TrueType::type Type;
};
template <typename TLabelType, unsigned int VImageDimension>
struct IsLabel< itk::LabelMap< itk::LabelObject< TLabelType, VImageDimension > > >
: public IsLabel< typename ImageTypeToPixelID< itk::LabelMap< itk::LabelObject< TLabelType, VImageDimension > > >::PixelIDType >
{};
template <typename TPixelIDType, unsigned int VImageDimension =0>
struct IsInstantiated
{
static const bool Value = ((int)PixelIDToPixelIDValue<TPixelIDType>::Result != (int)sitkUnknown)
&& ( (VImageDimension == 0)||(VImageDimension == 2) || (VImageDimension == 3)
#ifdef SITK_4D_IMAGES
|| (VImageDimension == 4)
#endif
);
typedef typename nsstd::integral_constant<bool, Value>::value_type ValueType;
typedef typename nsstd::integral_constant<bool, Value>::type Type;
};
template <typename TPixelType, unsigned int VImageDimension >
struct IsInstantiated< itk::Image< TPixelType, VImageDimension>, 0 >
: public IsInstantiated< typename ImageTypeToPixelID< itk::Image<TPixelType, VImageDimension> >::PixelIDType, VImageDimension >
{};
template <typename TPixelType, unsigned int VImageDimension>
struct IsInstantiated< itk::VectorImage< TPixelType, VImageDimension>, 0 >
: public IsInstantiated< typename ImageTypeToPixelID< itk::VectorImage<TPixelType, VImageDimension> >::PixelIDType, VImageDimension >
{};
template <typename TLabelType, unsigned int VImageDimension>
struct IsInstantiated< itk::LabelMap< itk::LabelObject< TLabelType, VImageDimension > >, 0 >
: public IsInstantiated< typename ImageTypeToPixelID< itk::LabelMap< itk::LabelObject< TLabelType, VImageDimension > > >::PixelIDType, VImageDimension >
{};
}
}
#endif // _sitkPixelIDTokens_h
|