VTK  9.3.20240328
vtkResourceFileLocator.h
Go to the documentation of this file.
1 // SPDX-FileCopyrightText: Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
2 // SPDX-License-Identifier: BSD-3-Clause
23 #ifndef vtkResourceFileLocator_h
24 #define vtkResourceFileLocator_h
25 
26 #include "vtkCommonMiscModule.h" // For export macro
27 #include "vtkObject.h"
28 
29 #include <string> // needed for std::string
30 #include <vector> // needed for std::vector
31 
32 VTK_ABI_NAMESPACE_BEGIN
33 class VTKCOMMONMISC_EXPORT vtkResourceFileLocator : public vtkObject
34 {
35 public:
38  void PrintSelf(ostream& os, vtkIndent indent) override;
39 
41 
45  vtkSetMacro(LogVerbosity, int);
46  vtkGetMacro(LogVerbosity, int);
48 
50 
55  virtual std::string Locate(const std::string& anchor, const std::string& landmark,
56  const std::string& defaultDir = std::string());
58 
60 
68  virtual std::string Locate(const std::string& anchor,
69  const std::vector<std::string>& landmark_prefixes, const std::string& landmark,
70  const std::string& defaultDir = std::string());
72 
74 
82  static VTK_FILEPATH std::string GetLibraryPathForSymbolUnix(const char* symbolname);
85 
86 protected:
89 
90 private:
92  void operator=(const vtkResourceFileLocator&) = delete;
93 
94  int LogVerbosity;
95 };
96 
97 // Wrap the input as an argument, this will force expansion
98 // if the input is a macro itself
99 #define _vtkGetSymbolNameAsString(x) _vtkGetSymbolNameAsString_I((x))
100 // Unwrap the expanded input
101 #define _vtkGetSymbolNameAsString_I(x) _vtkGetSymbolNameAsString_II x
102 // Stringify the epanded contents
103 #define _vtkGetSymbolNameAsString_II(...) #__VA_ARGS__
104 
105 #if defined(_WIN32) && !defined(__CYGWIN__)
106 #define vtkGetLibraryPathForSymbol(function) \
107  vtkResourceFileLocator::GetLibraryPathForSymbolWin32(reinterpret_cast<const void*>(&function))
108 #else
109 #define vtkGetLibraryPathForSymbol(function) \
110  vtkResourceFileLocator::GetLibraryPathForSymbolUnix(_vtkGetSymbolNameAsString(function))
111 #endif
112 
113 VTK_ABI_NAMESPACE_END
114 #endif
a simple class to control print indentation
Definition: vtkIndent.h:108
abstract base class for most VTK objects
Definition: vtkObject.h:161
utility to locate resource files.
virtual std::string Locate(const std::string &anchor, const std::string &landmark, const std::string &defaultDir=std::string())
Given a starting anchor directory, look for the landmark file relative to the anchor.
~vtkResourceFileLocator() override
static VTK_FILEPATH std::string GetLibraryPathForSymbolUnix(const char *symbolname)
Returns the name of the library providing the symbol.
void PrintSelf(ostream &os, vtkIndent indent) override
Methods invoked by print to print information about the object including superclasses.
static VTK_FILEPATH std::string GetLibraryPathForSymbolWin32(const void *fptr)
Returns the name of the library providing the symbol.
static vtkResourceFileLocator * New()
virtual std::string Locate(const std::string &anchor, const std::vector< std::string > &landmark_prefixes, const std::string &landmark, const std::string &defaultDir=std::string())
This variant is used to look for landmark relative to the anchor using additional prefixes for the la...
@ string
Definition: vtkX3D.h:490
#define VTK_FILEPATH