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.

134 lines
4.9 KiB

2 years ago
/*=========================================================================
Program: Visualization Toolkit
Module: $RCSfile: vtkInstantiator.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 vtkInstantiator - create an instance of any VTK class from its name.
// .SECTION Description
// vtkInstantiator provides an interface to create an instance of any
// VTK class from its name. Instances are created through registered
// pointers to functions returning the objects. New classes can also be
// registered with the creator. VTK libraries automatically register
// their classes with the creator when they are loaded. Instances are
// created using the static New() method, so the normal vtkObjectFactory
// mechanism is still invoked.
//
// When using this class from language wrappers (Tcl, Python, or Java),
// the vtkInstantiator should be able to create any class from any kit
// that has been loaded.
//
// In C++ code, one should include the header for each kit from which
// one wishes to create instances through vtkInstantiator. This is
// necessary to ensure proper linking when building static libraries.
// Be careful, though, because including each kit's header means every
// class from that kit will be linked into your executable whether or
// not the class is used. The headers are:
//
// vtkCommon - vtkCommonInstantiator.h
// vtkFiltering - vtkFilteringInstantiator.h
// vtkIO - vtkIOInstantiator.h
// vtkImaging - vtkImagingInstantiator.h
// vtkGraphics - vtkGraphicsInstantiator.h
// vtkRendering - vtkRenderingInstantiator.h
// vtkVolumeRendering - vtkVolumeRenderingInstantiator.h
// vtkHybrid - vtkHybridInstantiator.h
// vtkParallel - vtkParallelInstantiator.h
//
// The VTK_MAKE_INSTANTIATOR() command in CMake is used to automatically
// generate the creator registration for each VTK library. It can also
// be used to create registration code for VTK-style user libraries
// that are linked to vtkCommon. After using this command to register
// classes from a new library, the generated header must be included.
//
#ifndef __vtkInstantiator_h
#define __vtkInstantiator_h
#include "vtkObject.h"
// The vtkDebugLeaks singleton must be initialized before and
// destroyed after the vtkInstantiator singleton.
#include "vtkDebugLeaksManager.h" // Needed for proper singleton initialization
class vtkInstantiatorInitialize;
class vtkInstantiatorHashTable;
class VTK_COMMON_EXPORT vtkInstantiator : public vtkObject
{
public:
static vtkInstantiator* New();
vtkTypeRevisionMacro(vtkInstantiator,vtkObject);
void PrintSelf(ostream& os, vtkIndent indent);
// Description:
// Create an instance of the class whose name is given. If creation
// fails, a NULL pointer is returned.
static vtkObject* CreateInstance(const char* className);
//BTX
typedef vtkObject* (*CreateFunction)();
// Description:
// Register a function to create instances of the class whose name
// is given. This allows more than one create function to be
// registered for the same class. The first one registered is used
// until it is unregistered.
static void RegisterInstantiator(const char* className,
CreateFunction createFunction);
// Description:
// Unregister the instance creation of the class whose name is
// given. This will unregister the function given, but any other
// function registered for the same class will be left untouched.
static void UnRegisterInstantiator(const char* className,
CreateFunction createFunction);
//ETX
protected:
vtkInstantiator();
~vtkInstantiator();
// Internal storage for registered creation functions.
static vtkInstantiatorHashTable* CreatorTable;
static void ClassInitialize();
static void ClassFinalize();
//BTX
friend class vtkInstantiatorInitialize;
//ETX
private:
vtkInstantiator(const vtkInstantiator&); // Not implemented.
void operator=(const vtkInstantiator&); // Not implemented.
};
//BTX
// Utility class to make sure vtkInstantiator is initialized before it
// is used.
class VTK_COMMON_EXPORT vtkInstantiatorInitialize
{
public:
vtkInstantiatorInitialize();
~vtkInstantiatorInitialize();
private:
static unsigned int Count;
};
// This instance will show up in any translation unit that uses
// vtkInstantiator. It will make sure vtkInstantiator is initialized
// before it is used.
static vtkInstantiatorInitialize vtkInstantiatorInitializer;
//ETX
#endif