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 /*========================================================================= 19 * 20 * Portions of this file are subject to the VTK Toolkit Version 3 copyright. 21 * 22 * Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen 23 * 24 * For complete copyright, license and disclaimer of warranty information 25 * please refer to the NOTICE file at the top of the ITK source tree. 26 * 27 *=========================================================================*/ 28 #ifndef itkIndent_h 29 #define itkIndent_h 30 31 #include "itkMacro.h" 32 #include <iostream> 33 34 namespace itk 35 { 36 /** \class Indent 37 * \brief Control indentation during Print() invocation. 38 * 39 * Indent is used to control indentation during the chaining print 40 * process. This way nested objects can correctly indent themselves. 41 * This class works with the print methods defined in Object (i.e., 42 * the public method Print() and the protected methods PrintSelf(), 43 * PrintHeader(), and PrintTrailer(). 44 * 45 * \ingroup OSSystemObjects 46 * \ingroup ITKCommon 47 */ 48 49 class ITKCommon_EXPORT Indent 50 { 51 public: 52 /** Standard class type aliases. */ 53 using Self = Indent; 54 55 /** Method for creation through the object factory. */ 56 static Self * New(); 57 58 /** Destroy this instance. */ Delete()59 void Delete() { delete this; } 60 61 /** Construct the object with an initial indentation level. */ 62 Indent(int ind = 0) { m_Indent = ind; } 63 64 /** Return the name of the class. */ GetNameOfClass()65 static const char * GetNameOfClass() { return "Indent"; } 66 67 /** Determine the next indentation level. Keep indenting by two until the 68 * a maximum of forty spaces is reached. */ 69 Indent GetNextIndent(); 70 71 /** Print out the indentation. Basically output a bunch of spaces. */ 72 friend ITKCommon_EXPORT std::ostream & operator<<(std::ostream & os, const Indent & o); 73 74 private: 75 int m_Indent; 76 }; 77 } // end namespace itk 78 79 #endif 80