Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032 #include <Pipeline/cmtkPipelineObject.h>
00033
00034 namespace
00035 cmtk
00036 {
00037
00040
00041 PipelineObject::PipelineObject()
00042 {
00043 Owner = NULL;
00044
00045
00046 ExecuteTime = 0;
00047 ExecutePending = 0;
00048 }
00049
00050 int PipelineObject::Register( PipelineObject *const owner )
00051 {
00052 if ( owner )
00053 {
00054 Owner = owner;
00055 }
00056 this->Object::Reference();
00057 return this->GetReferenceCount();
00058 }
00059
00060
00061 void PipelineObject::Unregister( PipelineObject *const owner )
00062 {
00063
00064 if ( Owner == owner ) Owner = NULL;
00065
00066 this->Delete();
00067 }
00068
00069 long PipelineObject::Update()
00070 {
00071 this->CheckInputForUpdate( Owner );
00072 return this->ExecuteIfNecessary();
00073 }
00074
00075 int PipelineObject::CheckInputForUpdate( PipelineObject *const object )
00076 {
00077 if ( object )
00078 {
00079 const long ObjectTime = object->Update();
00080 if ( ObjectTime > ExecuteTime )
00081 {
00082 ExecutePending = 1;
00083 return 1;
00084 }
00085 }
00086 return 0;
00087 }
00088
00089 long PipelineObject::ExecuteIfNecessary()
00090 {
00091 if ( (this->GetModifiedTime() > ExecuteTime) || ExecutePending )
00092 {
00093 this->Execute();
00094 this->UpdateExecuteTime();
00095 }
00096 return ExecuteTime;
00097 }
00098
00099 }