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.
127 lines
5.0 KiB
127 lines
5.0 KiB
/*=========================================================================
|
|
|
|
Program: Visualization Toolkit
|
|
Module: $RCSfile: vtkInformationKey.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 vtkInformationKey - Superclass for vtkInformation keys.
|
|
// .SECTION Description
|
|
// vtkInformationKey is the superclass for all keys used to access the
|
|
// map represented by vtkInformation. The vtkInformation::Set and
|
|
// vtkInformation::Get methods of vtkInformation are accessed by
|
|
// information keys. A key is a pointer to an instance of a subclass
|
|
// of vtkInformationKey. The type of the subclass determines the
|
|
// overload of Set/Get that is selected. This ensures that the type
|
|
// of value stored in a vtkInformation instance corresponding to a
|
|
// given key matches the type expected for that key.
|
|
|
|
#ifndef __vtkInformationKey_h
|
|
#define __vtkInformationKey_h
|
|
|
|
#include "vtkObjectBase.h"
|
|
#include "vtkObject.h" // Need vtkTypeRevisionMacro
|
|
|
|
class vtkInformation;
|
|
|
|
class VTK_FILTERING_EXPORT vtkInformationKey : public vtkObjectBase
|
|
{
|
|
public:
|
|
vtkTypeRevisionMacro(vtkInformationKey,vtkObjectBase);
|
|
void PrintSelf(ostream& os, vtkIndent indent);
|
|
|
|
// Description:
|
|
// Prevent normal vtkObject reference counting behavior.
|
|
virtual void Register(vtkObjectBase*);
|
|
|
|
// Description:
|
|
// Prevent normal vtkObject reference counting behavior.
|
|
virtual void UnRegister(vtkObjectBase*);
|
|
|
|
// Description:
|
|
// Get the name of the key. This is not the type of the key, but
|
|
// the name of the key instance.
|
|
const char* GetName();
|
|
|
|
// Description:
|
|
// Get the location of the key. This is the name of the class in
|
|
// which the key is defined.
|
|
const char* GetLocation();
|
|
|
|
// Description:
|
|
// Key instances are static data that need to be created and
|
|
// destroyed. The constructor and destructor must be public. The
|
|
// name of the static instance and the class in which it is defined
|
|
// should be passed to the constructor. They must be string
|
|
// literals because the strings are not copied.
|
|
vtkInformationKey(const char* name, const char* location);
|
|
~vtkInformationKey();
|
|
|
|
// Description:
|
|
// Copy the entry associated with this key from one information
|
|
// object to another. If there is no entry in the first information
|
|
// object for this key, the value is removed from the second.
|
|
virtual void ShallowCopy(vtkInformation* from, vtkInformation* to)=0;
|
|
|
|
// Description:
|
|
// Duplicate (new instance created) the entry associated with this key from
|
|
// one information object to another (new instances of any contained
|
|
// vtkInformation and vtkInformationVector objects are created).
|
|
virtual void DeepCopy(vtkInformation *vtkNotUsed(from),
|
|
vtkInformation *vtkNotUsed(to)) {}
|
|
|
|
// Description:
|
|
// Remove this key from the given information object.
|
|
virtual void Remove(vtkInformation* info);
|
|
|
|
// Description:
|
|
// Report a reference this key has in the given information object.
|
|
virtual void Report(vtkInformation* info, vtkGarbageCollector* collector);
|
|
|
|
// Description:
|
|
// Print the key's value in an information object to a stream.
|
|
void Print(vtkInformation* info);
|
|
virtual void Print(ostream& os, vtkInformation* info);
|
|
|
|
protected:
|
|
const char* Name;
|
|
const char* Location;
|
|
|
|
// Set/Get the value associated with this key instance in the given
|
|
// information object.
|
|
void SetAsObjectBase(vtkInformation* info, vtkObjectBase* value);
|
|
vtkObjectBase* GetAsObjectBase(vtkInformation* info);
|
|
|
|
// Report the object associated with this key instance in the given
|
|
// information object to the collector.
|
|
void ReportAsObjectBase(vtkInformation* info,
|
|
vtkGarbageCollector* collector);
|
|
|
|
// Helper for debug leaks support.
|
|
void ConstructClass(const char*);
|
|
|
|
private:
|
|
vtkInformationKey(const vtkInformationKey&); // Not implemented.
|
|
void operator=(const vtkInformationKey&); // Not implemented.
|
|
};
|
|
|
|
// Macros to define an information key instance in a C++ source file.
|
|
// The corresponding method declaration must appear in the class
|
|
// definition in the header file.
|
|
#define vtkInformationKeyMacro(CLASS, NAME, type) \
|
|
static vtkInformation##type##Key* CLASS##_##NAME = \
|
|
new vtkInformation##type##Key(#NAME, #CLASS); \
|
|
vtkInformation##type##Key* CLASS::NAME() { return CLASS##_##NAME; }
|
|
#define vtkInformationKeyRestrictedMacro(CLASS, NAME, type, required) \
|
|
static vtkInformation##type##Key* CLASS##_##NAME = \
|
|
new vtkInformation##type##Key(#NAME, #CLASS, required); \
|
|
vtkInformation##type##Key* CLASS::NAME() { return CLASS##_##NAME; }
|
|
|
|
#endif
|
|
|