Cloned library of VTK-5.0.0 with extra build files for internal package management.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

185 lines
6.4 KiB

/*=========================================================================
Program: Visualization Toolkit
Module: $RCSfile: vtkObjectBase.h,v $
Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
All rights reserved.
See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
This software is distributed WITHOUT ANY WARRANTY; without even
the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
PURPOSE. See the above copyright notice for more information.
=========================================================================*/
// .NAME vtkObjectBase - abstract base class for most VTK objects
// .SECTION Description
// vtkObjectBase is the base class for all reference counted classes
// in the VTK. These classes include vtkCommand classes, vtkContainer
// classes, and vtkObject classes.
//
// vtkObjectBase performs reference counting: objects that are
// reference counted exist as long as another object uses them. Once
// the last reference to a reference counted object is removed, the
// object will spontaneously destruct.
//
// Constructor and destructor of the subclasses of vtkObjectBase
// should be protected, so that only New() and UnRegister() actually
// call them. Debug leaks can be used to see if there are any objects
// left with nonzero reference count.
//
// .SECTION Caveats
// Note: Objects of subclasses of vtkObjectBase should always be
// created with the New() method and deleted with the Delete()
// method. They cannot be allocated off the stack (i.e., automatic
// objects) because the constructor is a protected method.
//
// .SECTION See also
// vtkObject vtkCommand vtkContainer
#ifndef __vtkObjectBase_h
#define __vtkObjectBase_h
#include "vtkIndent.h"
#include "vtkSystemIncludes.h"
class vtkGarbageCollector;
class vtkGarbageCollectorToObjectBaseFriendship;
class VTK_COMMON_EXPORT vtkObjectBase
{
virtual const char* GetClassNameInternal() const { return "vtkObjectBase"; }
public:
#ifdef VTK_WORKAROUND_WINDOWS_MANGLE
// Avoid windows name mangling.
# define GetClassNameA GetClassName
# define GetClassNameW GetClassName
#endif
// Description:
// Return the class name as a string. This method is defined
// in all subclasses of vtkObjectBase with the vtkTypeRevisionMacro found
// in vtkSetGet.h.
const char* GetClassName() const;
#ifdef VTK_WORKAROUND_WINDOWS_MANGLE
# undef GetClassNameW
# undef GetClassNameA
//BTX
// Define possible mangled names.
const char* GetClassNameA() const;
const char* GetClassNameW() const;
//ETX
#endif
// Description:
// Return 1 if this class type is the same type of (or a subclass of)
// the named class. Returns 0 otherwise. This method works in
// combination with vtkTypeRevisionMacro found in vtkSetGet.h.
static int IsTypeOf(const char *name);
// Description:
// Return 1 if this class is the same type of (or a subclass of)
// the named class. Returns 0 otherwise. This method works in
// combination with vtkTypeRevisionMacro found in vtkSetGet.h.
virtual int IsA(const char *name);
// Description:
// Delete a VTK object. This method should always be used to delete
// an object when the New() method was used to create it. Using the
// C++ delete method will not work with reference counting.
virtual void Delete();
// Description:
// Delete a reference to this object. This version will not invoke
// garbage collection and can potentially leak the object if it is
// part of a reference loop. Use this method only when it is known
// that the object has another reference and would not be collected
// if a full garbage collection check were done.
virtual void FastDelete();
// Description:
// Create an object with Debug turned off, modified time initialized
// to zero, and reference counting on.
static vtkObjectBase *New()
{return new vtkObjectBase;}
#ifdef _WIN32
// avoid dll boundary problems
void* operator new( size_t tSize );
void operator delete( void* p );
#endif
// Description:
// Print an object to an ostream. This is the method to call
// when you wish to see print the internal state of an object.
void Print(ostream& os);
// Description:
// Methods invoked by print to print information about the object
// including superclasses. Typically not called by the user (use
// Print() instead) but used in the hierarchical print process to
// combine the output of several classes.
virtual void PrintSelf(ostream& os, vtkIndent indent);
virtual void PrintHeader(ostream& os, vtkIndent indent);
virtual void PrintTrailer(ostream& os, vtkIndent indent);
// Description:
// Increase the reference count (mark as used by another object).
virtual void Register(vtkObjectBase* o);
// Description:
// Decrease the reference count (release by another object). This
// has the same effect as invoking Delete() (i.e., it reduces the
// reference count by 1).
virtual void UnRegister(vtkObjectBase* o);
// Description:
// Return the current reference count of this object.
int GetReferenceCount()
{return this->ReferenceCount;}
// Description:
// Sets the reference count. (This is very dangerous, use with care.)
void SetReferenceCount(int);
// Description:
// Prints a list of the class .cxx file CVS revisions for all
// classes in the object's inheritance chain. The format of the
// list is "vtkObjectBase 1.4\n" with one class per line. The list
// always starts with the least-derived class (vtkObjectBase), and
// ends with the most-derived class. This is useful for programs
// wishing to do serialization of VTK objects.
void PrintRevisions(ostream& os);
protected:
vtkObjectBase();
virtual ~vtkObjectBase();
virtual void CollectRevisions(ostream& os);
int ReferenceCount; // Number of uses of this object by other objects
// Internal Register/UnRegister implementation that accounts for
// possible garbage collection participation. The second argument
// indicates whether to participate in garbage collection.
virtual void RegisterInternal(vtkObjectBase*, int check);
virtual void UnRegisterInternal(vtkObjectBase*, int check);
// See vtkGarbageCollector.h:
virtual void ReportReferences(vtkGarbageCollector*);
private:
//BTX
friend VTK_COMMON_EXPORT ostream& operator<<(ostream& os, vtkObjectBase& o);
friend class vtkGarbageCollectorToObjectBaseFriendship;
//ETX
protected:
//BTX
vtkObjectBase(const vtkObjectBase&) {}
void operator=(const vtkObjectBase&) {}
//ETX
};
#endif