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 itkFunctionBase_h
19 #define itkFunctionBase_h
20 
21 #include "itkObject.h"
22 #include "itkObjectFactory.h"
23 
24 namespace itk
25 {
26 /**
27  * \class FunctionBase
28  * \brief Base class for all ITK function objects
29  *
30  * FunctionBase is the base class for ITK function objects. Specifically,
31  * the abstract method Evaluate() maps a point from the input space to a point
32  * in the output space.
33  *
34  * Subclasses must override Evaluate().
35  *
36  * This class is template over the input (domain) type and
37  * the output (range) type.
38  *
39  * \ingroup Functions
40  *
41  * \ingroup ITKCommon
42  */
43 template< typename TInput, typename TOutput >
44 class ITK_TEMPLATE_EXPORT FunctionBase:public Object
45 {
46 public:
47   ITK_DISALLOW_COPY_AND_ASSIGN(FunctionBase);
48 
49   /** Standard class type aliases. */
50   using Self = FunctionBase;
51   using Superclass = Object;
52   using Pointer = SmartPointer< Self >;
53   using ConstPointer = SmartPointer< const Self >;
54 
55   /** Run-time type information (and related methods). */
56   itkTypeMacro(FunctionBase, Object);
57 
58   /** Input type */
59   using InputType = TInput;
60 
61   /** Output type */
62   using OutputType = TOutput;
63 
64   /** Evaluate at the specified input position */
65   virtual OutputType Evaluate(const InputType & input) const = 0;
66 
67 protected:
68   FunctionBase()= default;
69   ~FunctionBase() override = default;
70 };
71 } // end namespace itk
72 
73 #endif
74