ITK  4.2.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 class ProcessObject;
39 class DataObject;
40 
41 /*--------------------Data Object Exceptions---------------------------*/
42 
47 class ITKCommon_EXPORT DataObjectError:public ExceptionObject
48 {
49 public:
53 
55  virtual ~DataObjectError()
56  throw( ) {}
57 
59  DataObjectError(const char *file, unsigned int lineNumber);
60 
62  DataObjectError(const std::string & file, unsigned int lineNumber);
63 
65  DataObjectError(const DataObjectError & orig);
66 
68  DataObjectError & operator=(const DataObjectError & orig);
69 
71  itkTypeMacro(DataObjectError, ExceptionObject);
72 
74  void SetDataObject(DataObject *dobj);
75 
77  DataObject * GetDataObject();
78 
79 protected:
84  virtual void PrintSelf(std::ostream & os, Indent indent) const;
85 
86 private:
88 };
89 
96 class ITKCommon_EXPORT InvalidRequestedRegionError:public DataObjectError
97 {
98 public:
102 
105  throw( ) {}
106 
108  InvalidRequestedRegionError(const char *file, unsigned int lineNumber);
109 
111  InvalidRequestedRegionError(const std::string & file, unsigned int lineNumber);
112 
115 
118 
121 protected:
122 
127  virtual void PrintSelf(std::ostream & os, Indent indent) const;
128 };
129 
130 /*----------------------------Data Object--------------------------------*/
131 
275 class ITKCommon_EXPORT DataObject:public Object
276 {
277 public:
279  typedef DataObject Self;
283 
284  typedef std::string DataObjectIdentifierType;
285 
287  itkTypeMacro(DataObject, Object);
288 
294  void DisconnectPipeline();
295 
309 
311  const DataObjectIdentifierType & GetSourceOutputName() const;
312 
314  typedef std::vector< Pointer >::size_type DataObjectPointerArraySizeType;
315  DataObjectPointerArraySizeType GetSourceOutputIndex() const;
316 
319  virtual void Initialize();
320 
323  void SetReleaseDataFlag(bool flag)
324  {
325  m_ReleaseDataFlag = flag;
326  }
327 
328  itkGetConstReferenceMacro(ReleaseDataFlag, bool);
329  itkBooleanMacro(ReleaseDataFlag);
330 
334  static void SetGlobalReleaseDataFlag(bool val);
335 
336  static bool GetGlobalReleaseDataFlag();
337 
338  static void GlobalReleaseDataFlagOn()
339  { Self::SetGlobalReleaseDataFlag(true); }
340  static void GlobalReleaseDataFlagOff()
341  { Self::SetGlobalReleaseDataFlag(false); }
342 
347  void ReleaseData();
348 
351  bool ShouldIReleaseData() const;
352 
354  bool GetDataReleased() const
355  { return m_DataReleased; }
356 
367  virtual void Update();
368 
378  virtual void UpdateOutputInformation();
379 
382  virtual void PropagateRequestedRegion();
383 
384  virtual void UpdateOutputData();
385 
389  virtual void ResetPipeline();
390 
393  void SetPipelineMTime(unsigned long time)
394  { m_PipelineMTime = time; }
395  itkGetConstReferenceMacro(PipelineMTime, unsigned long);
397 
399  virtual unsigned long GetUpdateMTime() const;
400 
406  itkSetMacro( RealTimeStamp, RealTimeStamp );
407  itkGetConstReferenceMacro( RealTimeStamp, RealTimeStamp );
409 
418  virtual void PrepareForNewData()
419  { this->Initialize(); }
420 
425  virtual void DataHasBeenGenerated();
426 
431 
441  virtual bool RequestedRegionIsOutsideOfTheBufferedRegion()
442  { return false; }
443 
456  virtual bool VerifyRequestedRegion() { return true; }
457 
467  virtual void CopyInformation(const DataObject *) {}
468 
474  virtual void SetRequestedRegion(const DataObject *) {}
475 
481  virtual void Graft(const DataObject *) {}
482 protected:
483  DataObject();
484  ~DataObject();
485  void PrintSelf(std::ostream & os, Indent indent) const;
487 
489  virtual void PropagateResetPipeline();
490 
491 private:
492  DataObject(const Self &); //purposely not implemented
493  void operator=(const Self &); //purposely not implemented
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 
513  unsigned long m_PipelineMTime;
514 
517 
522  bool ConnectSource(ProcessObject *s, const DataObjectIdentifierType & name);
523 
532  bool DisconnectSource(ProcessObject *s, const DataObjectIdentifierType & name);
533 
535  friend class ProcessObject;
536  friend class DataObjectError;
537 };
538 } // end namespace itk
539 
540 #endif
541