ITK  4.12.0
Insight Segmentation and Registration Toolkit
itkDataObject.h
Go to the documentation of this file.
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 itkDataObject_h
29 #define itkDataObject_h
30 
31 #include "itkObject.h"
33 #include "itkMacro.h"
34 #include "itkRealTimeStamp.h"
35 
36 namespace itk
37 {
38 // Forward reference because of circular dependencies
39 class ITK_FORWARD_EXPORT ProcessObject;
40 class ITK_FORWARD_EXPORT DataObject;
41 
42 /*--------------------Data Object Exceptions---------------------------*/
43 
48 class ITKCommon_EXPORT DataObjectError:public ExceptionObject
49 {
50 public:
54 
56  virtual ~DataObjectError()
57  ITK_NOEXCEPT_OR_THROW {}
58 
60  DataObjectError(const char *file, unsigned int lineNumber);
61 
63  DataObjectError(const std::string & file, unsigned int lineNumber);
64 
66  DataObjectError(const DataObjectError & orig);
67 
69  DataObjectError & operator=(const DataObjectError & orig);
70 
72  itkTypeMacro(DataObjectError, ExceptionObject);
73 
75  void SetDataObject(DataObject *dobj);
76 
78  DataObject * GetDataObject();
79 
80 protected:
85  virtual void PrintSelf(std::ostream & os, Indent indent) const;
86 
87 private:
89 };
90 
97 class ITKCommon_EXPORT InvalidRequestedRegionError:public DataObjectError
98 {
99 public:
103 
106  ITK_NOEXCEPT_OR_THROW {}
107 
109  InvalidRequestedRegionError(const char *file, unsigned int lineNumber);
110 
112  InvalidRequestedRegionError(const std::string & file, unsigned int lineNumber);
113 
116 
119 
122 
123 protected:
128  virtual void PrintSelf(std::ostream & os, Indent indent) const ITK_OVERRIDE;
129 };
130 
131 /*----------------------------Data Object--------------------------------*/
132 
276 class ITK_FORCE_EXPORT_MACRO(ITKCommon) DataObject:public Object
277 {
278 public:
280  typedef DataObject Self;
281  typedef Object Superclass;
284 
285  typedef std::string DataObjectIdentifierType;
286 
288  itkTypeMacro(DataObject, Object);
289 
295  void DisconnectPipeline();
296 
310 
313 
315  typedef std::vector< Pointer >::size_type DataObjectPointerArraySizeType;
317 
320  virtual void Initialize();
321 
324  void SetReleaseDataFlag(bool flag)
325  {
326  m_ReleaseDataFlag = flag;
327  }
328 
329  itkGetConstReferenceMacro(ReleaseDataFlag, bool);
330  itkBooleanMacro(ReleaseDataFlag);
331 
335  static void SetGlobalReleaseDataFlag(bool val);
336 
337  static bool GetGlobalReleaseDataFlag();
338 
343 
348  void ReleaseData();
349 
352  bool ShouldIReleaseData() const;
353 
355  bool GetDataReleased() const
356  { return m_DataReleased; }
357 
368  virtual void Update();
369 
379  virtual void UpdateOutputInformation();
380 
383  virtual void PropagateRequestedRegion();
384 
385  virtual void UpdateOutputData();
386 
390  virtual void ResetPipeline();
391 
395  { m_PipelineMTime = time; }
396  itkGetConstReferenceMacro(PipelineMTime, ModifiedTimeType);
398 
400  virtual ModifiedTimeType GetUpdateMTime() const;
401 
407  itkSetMacro( RealTimeStamp, RealTimeStamp );
408  itkGetConstReferenceMacro( RealTimeStamp, RealTimeStamp );
410 
419  virtual void PrepareForNewData()
420  { this->Initialize(); }
421 
426  virtual void DataHasBeenGenerated();
427 
432 
443  { return false; }
444 
457  virtual bool VerifyRequestedRegion() { return true; }
458 
468  virtual void CopyInformation(const DataObject *) {}
469 
475  virtual void SetRequestedRegion(const DataObject *) {}
476 
482  virtual void Graft(const DataObject *) {}
483 
484 protected:
485  DataObject();
486  virtual ~DataObject();
487  virtual void PrintSelf(std::ostream & os, Indent indent) const ITK_OVERRIDE;
488 
490  virtual void PropagateResetPipeline();
491 
492 private:
493  ITK_DISALLOW_COPY_AND_ASSIGN(DataObject);
494 
498 
504 
507 
508  bool m_ReleaseDataFlag; //Data will release after use by a filter if on
509  bool m_DataReleased; //Keep track of data release during pipeline execution
510 
514 
517 
523 
533 
535  friend class ProcessObject;
536  friend class DataObjectError;
537 };
538 } // end namespace itk
539 
540 #endif
virtual bool RequestedRegionIsOutsideOfTheBufferedRegion()
virtual void CopyInformation(const DataObject *)
bool m_ReleaseDataFlag
virtual void PrintSelf(std::ostream &os, Indent indent) const override
void DisconnectPipeline()
virtual void Initialize()
DataObjectPointerArraySizeType GetSourceOutputIndex() const
bool GetDataReleased() const
virtual void UpdateOutputInformation()
static void GlobalReleaseDataFlagOn()
unsigned long ModifiedTimeType
Definition: itkIntTypes.h:164
void SetPipelineMTime(ModifiedTimeType time)
void ReleaseData()
class ITK_FORCE_EXPORT_MACRO(ITKCommon) DataObject typedef Object Superclass
The base class for all process objects (source, filters, mappers) in the Insight data processing pipe...
std::vector< Pointer >::size_type DataObjectPointerArraySizeType
class ITK_FORWARD_EXPORT DataObject
Definition: itkDataObject.h:40
std::string DataObjectIdentifierType
Implements a weak reference to an object.
virtual ModifiedTimeType GetUpdateMTime() const
DataObjectIdentifierType m_SourceOutputName
const DataObjectIdentifierType & GetSourceOutputName() const
virtual void PrepareForNewData()
SmartPointer< Self > Pointer
static void SetGlobalReleaseDataFlag(bool val)
The RealTimeStamp is a data structure for representing time with high precision and a large dynamic r...
static bool GetGlobalReleaseDataFlag()
virtual void SetRequestedRegion(const DataObject *)
virtual void ResetPipeline()
bool ConnectSource(ProcessObject *s, const DataObjectIdentifierType &name)
RealTimeStamp m_RealTimeStamp
virtual void PropagateResetPipeline()
virtual bool VerifyRequestedRegion()
virtual void SetRequestedRegionToLargestPossibleRegion()
virtual void DataHasBeenGenerated()
SmartPointer< const Self > ConstPointer
bool m_DataReleased
Standard exception handling object.
bool ShouldIReleaseData() const
Generate a unique, increasing time value.
Definition: itkTimeStamp.h:59
Exception object for DataObject exceptions.
Definition: itkDataObject.h:48
virtual ~DataObject()
bool DisconnectSource(ProcessObject *s, const DataObjectIdentifierType &name)
Base class for all data objects in ITK.
virtual void Graft(const DataObject *)
virtual void PropagateRequestedRegion()
WeakPointer< ProcessObject > m_Source
SmartPointerForwardReference< ProcessObject > GetSource() const
TimeStamp m_UpdateMTime
virtual ~InvalidRequestedRegionError() ITK_NOEXCEPT_OR_THROW
virtual void Update()
Control indentation during Print() invocation.
Definition: itkIndent.h:49
virtual ~DataObjectError() ITK_NOEXCEPT_OR_THROW
Definition: itkDataObject.h:56
static void GlobalReleaseDataFlagOff()
DataObject * m_DataObject
Definition: itkDataObject.h:88
void SetReleaseDataFlag(bool flag)
Base class for most ITK classes.
Definition: itkObject.h:59
Implements transparent reference counting in situations where forward references / cyclic include dep...
friend class DataObjectError
static bool m_GlobalReleaseDataFlag
ModifiedTimeType m_PipelineMTime
virtual void UpdateOutputData()