Skip to content

Commit 4bd274f

Browse files
committed
Apply VSG_DECLSPEC to Array2D, Array3D, and Value;
move VSG_USE_DYNAMIC_CAST to version.h.in
1 parent b7d2c30 commit 4bd274f

8 files changed

Lines changed: 14 additions & 19 deletions

File tree

CMakeLists.txt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,8 @@ if (VSG_SUPPORTS_Windowing)
9898
endif()
9999
endif()
100100

101+
set(VSG_USE_DYNAMIC_CAST 0 CACHE STRING "Use dynamic_cast in vsg::Object::cast<T>(), 0 for off, 1 for enabled." )
102+
101103
# this line needs to be after the call to setup_build_vars()
102104
configure_file("${VSG_SOURCE_DIR}/src/vsg/core/Version.h.in" "${VSG_VERSION_HEADER}")
103105

include/vsg/core/Array.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,7 @@ namespace vsg
101101
_data(nullptr),
102102
_size(0)
103103
{
104-
assign(data, offset, stride, static_cast<uint32_t>(l.size()));
104+
assign(data, offset, stride, l.size());
105105

106106
iterator itr = begin();
107107
for (const value_type& v : l) { (*itr++) = v; }

include/vsg/core/Array2D.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ namespace vsg
3131
{
3232

3333
template<typename T>
34-
class Array2D : public Data
34+
class VSG_DECLSPEC Array2D : public Data
3535
{
3636
public:
3737
using value_type = T;

include/vsg/core/Array3D.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLI
3030
namespace vsg
3131
{
3232
template<typename T>
33-
class Array3D : public Data
33+
class VSG_DECLSPEC Array3D : public Data
3434
{
3535
public:
3636
using value_type = T;

include/vsg/core/Object.h

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -22,12 +22,6 @@ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLI
2222
#include <vsg/core/ref_ptr.h>
2323
#include <vsg/core/type_name.h>
2424

25-
#ifdef VSG_USE_DYNAMIC_CAST
26-
#define VSG_CAST_DYNAMIC
27-
#else
28-
#undef VSG_CAST_DYNAMIC
29-
#endif
30-
3125
namespace vsg
3226
{
3327

@@ -91,7 +85,7 @@ namespace vsg
9185
virtual const std::type_info& type_info() const noexcept { return typeid(Object); }
9286
virtual bool is_compatible(const std::type_info& type) const noexcept { return typeid(Object) == type; }
9387

94-
#ifdef VSG_CAST_DYNAMIC
88+
#if VSG_USE_DYNAMIC_CAST == 1
9589
template<class T>
9690
T* cast() { return dynamic_cast<T*>(this); }
9791

include/vsg/core/Value.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLI
3636
namespace vsg
3737
{
3838
template<typename T>
39-
class Value : public Data
39+
class VSG_DECLSPEC Value : public Data
4040
{
4141
public:
4242
using value_type = T;

src/vsg/CMakeLists.txt

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -426,14 +426,10 @@ target_link_libraries(vsg ${LIBRARIES})
426426

427427
if (BUILD_SHARED_LIBS)
428428
target_compile_definitions(vsg INTERFACE VSG_SHARED_LIBRARY)
429-
else()
430-
if(CMAKE_CXX_COMPILER_ID MATCHES "Clang")
431-
if (VSG_USE_DYNAMIC_CAST)
432-
target_compile_definitions(vsg PRIVATE VSG_USE_DYNAMIC_CAST)
433-
else ()
434-
target_compile_definitions(vsg PRIVATE VSG_EXPORTS)
435-
endif ()
436-
endif()
429+
elseif(CMAKE_CXX_COMPILER_ID MATCHES "Clang" AND NOT VSG_USE_DYNAMIC_CAST)
430+
# Static build, Clang, and we are not using dynamic_cast:
431+
# export Array/Value/etc. to stabilize typeid.
432+
target_compile_definitions(vsg PRIVATE VSG_EXPORTS)
437433
endif()
438434

439435
# install headers

src/vsg/core/Version.h.in

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,9 @@ extern "C"
4545
/// Native Windowing support provided with vsg::Window::create(windowTraits) enabled when 1, disabled when 0
4646
#define VSG_SUPPORTS_Windowing @VSG_SUPPORTS_Windowing@
4747

48+
/// Define VSG_USE_DYNAMIC_CAST to avoid typeid(T) comparisons in vsg::Object::cast<T>()
49+
#define VSG_USE_DYNAMIC_CAST @VSG_USE_DYNAMIC_CAST@
50+
4851
struct VsgVersion
4952
{
5053
unsigned int major;

0 commit comments

Comments
 (0)