1 /*=========================================================================
2  *
3  *  Copyright Insight Software Consortium
4  *
5  *  Licensed under the Apache License, Version 2.0 (the "License");
6  *  you may not use this file except in compliance with the License.
7  *  You may obtain a copy of the License at
8  *
9  *         http://www.apache.org/licenses/LICENSE-2.0.txt
10  *
11  *  Unless required by applicable law or agreed to in writing, software
12  *  distributed under the License is distributed on an "AS IS" BASIS,
13  *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  *  See the License for the specific language governing permissions and
15  *  limitations under the License.
16  *
17  *=========================================================================*/
18 #ifndef itkImageRegionSplitterSlowDimension_h
19 #define itkImageRegionSplitterSlowDimension_h
20 
21 #include "itkImageRegionSplitterBase.h"
22 
23 namespace itk
24 {
25 
26 /** \class ImageRegionSplitterSlowDimension
27  * \brief Divide an image region along the slowest dimension
28  *
29  * ImageRegionSplitterSlowDimension divides an ImageRegion into smaller regions.
30  * ImageRegionSplitterSlowDimension is the default splitter for many situations.
31  *
32  * This ImageRegionSplitterSlowDimension class divides a region along the
33  * outermost or slowest dimension. If the outermost dimension has size
34  * 1 (i.e. a volume with a single slice), the ImageRegionSplitter will
35  * divide the region along the next outermost dimension. If that
36  * dimension has size 1, the process continues with the next outermost
37  * dimension.
38  *
39  * \sa ImageRegionSplitterDirection
40  *
41  * \ingroup ITKSystemObjects
42  * \ingroup DataProcessing
43  * \ingroup ITKCommon
44  */
45 
46 class ITKCommon_EXPORT ImageRegionSplitterSlowDimension
47   :public ImageRegionSplitterBase
48 {
49 public:
50   ITK_DISALLOW_COPY_AND_ASSIGN(ImageRegionSplitterSlowDimension);
51 
52   /** Standard class type aliases. */
53   using Self = ImageRegionSplitterSlowDimension;
54   using Superclass = ImageRegionSplitterBase;
55   using Pointer = SmartPointer< Self >;
56   using ConstPointer = SmartPointer< const Self >;
57 
58   /** Method for creation through the object factory. */
59   itkNewMacro(Self);
60 
61   /** Run-time type information (and related methods). */
62   itkTypeMacro(ImageRegionSplitterSlowDimension, ImageRegionSplitterBase);
63 
64 
65 protected:
66   ImageRegionSplitterSlowDimension();
67 
68   unsigned int GetNumberOfSplitsInternal( unsigned int dim,
69                                                   const IndexValueType regionIndex[],
70                                                   const SizeValueType regionSize[],
71                                                   unsigned int requestedNumber ) const override;
72 
73   unsigned int GetSplitInternal( unsigned int dim,
74                                          unsigned int i,
75                                          unsigned int numberOfPieces,
76                                          IndexValueType regionIndex[],
77                                          SizeValueType regionSize[] ) const override;
78 };
79 } // end namespace itk
80 
81 #endif
82