From 512a6fd351751e5185638fd8bc396c2e65d2ec19 Mon Sep 17 00:00:00 2001 From: Adam Glustein Date: Fri, 8 Nov 2024 15:45:52 -0500 Subject: [PATCH] Use cmake GenerateExportHeader to hopefully fix Windows visibility as well Signed-off-by: Adam Glustein --- cpp/csp/adapters/kafka/KafkaAdapterManager.h | 4 +- .../DialectGenericListReaderInterface.h | 5 +- .../parquet/ParquetInputAdapterManager.h | 3 +- .../parquet/ParquetOutputAdapterManager.h | 3 +- .../adapters/websocket/ClientAdapterManager.h | 2 +- cpp/csp/core/BasicAllocator.h | 2 +- cpp/csp/core/CMakeLists.txt | 2 +- cpp/csp/core/DynamicBitSet.h | 2 +- cpp/csp/core/Enum.h | 2 +- cpp/csp/core/EnumBitSet.h | 2 +- cpp/csp/core/Generator.h | 2 +- cpp/csp/core/Platform.h | 27 ++--- cpp/csp/core/QueueWaiter.h | 2 +- cpp/csp/core/TaggedPointerUnion.h | 2 +- cpp/csp/core/Time.h | 10 +- cpp/csp/engine/AdapterManager.h | 4 +- cpp/csp/engine/AlarmInputAdapter.h | 2 +- cpp/csp/engine/BasketInfo.h | 8 +- cpp/csp/engine/Consumer.h | 2 +- cpp/csp/engine/CppNode.h | 2 +- cpp/csp/engine/CspEnum.h | 6 +- cpp/csp/engine/CspType.h | 10 +- cpp/csp/engine/CycleStepTable.h | 2 +- cpp/csp/engine/DialectGenericType.h | 1 + cpp/csp/engine/Dictionary.h | 2 +- cpp/csp/engine/DynamicEngine.h | 2 +- cpp/csp/engine/DynamicNode.h | 2 +- cpp/csp/engine/Engine.h | 4 +- cpp/csp/engine/Enums.h | 2 +- cpp/csp/engine/EventPropagator.h | 2 +- cpp/csp/engine/Feedback.h | 4 +- cpp/csp/engine/GraphOutputAdapter.h | 2 +- cpp/csp/engine/InputAdapter.h | 2 +- cpp/csp/engine/Node.h | 2 +- cpp/csp/engine/OutputAdapter.h | 2 +- cpp/csp/engine/PendingPushEvents.h | 2 +- cpp/csp/engine/Profiler.h | 2 +- cpp/csp/engine/PullInputAdapter.h | 2 +- cpp/csp/engine/PushEvent.h | 4 +- cpp/csp/engine/PushInputAdapter.h | 2 +- cpp/csp/engine/PushPullInputAdapter.h | 2 +- cpp/csp/engine/RootEngine.h | 2 +- cpp/csp/engine/Scheduler.h | 2 +- cpp/csp/engine/StatusAdapter.h | 2 +- cpp/csp/engine/Struct.h | 24 ++-- cpp/csp/engine/TickBuffer.h | 2 +- cpp/csp/engine/TimeSeries.h | 6 +- cpp/csp/engine/TimeSeriesProvider.h | 2 +- cpp/csp/engine/TimerInputAdapter.h | 2 +- cpp/csp/engine/VectorContainer.h | 2 +- cpp/csp/engine/WindowBuffer.h | 2 +- cpp/csp/python/CMakeLists.txt | 14 +++ cpp/csp/python/Common.h | 4 +- cpp/csp/python/InitHelper.h | 2 +- cpp/csp/python/NumpyInputAdapter.h | 2 +- cpp/csp/python/PyAdapterManager.h | 2 +- cpp/csp/python/PyBasketInputProxy.h | 8 +- cpp/csp/python/PyBasketOutputProxy.h | 8 +- cpp/csp/python/PyEngine.h | 2 +- cpp/csp/python/PyGraphOutputAdapter.h | 2 +- cpp/csp/python/PyInputProxy.h | 2 +- cpp/csp/python/PyNode.h | 2 +- cpp/csp/python/PyNodeWrapper.h | 2 +- cpp/csp/python/PyNumbaNode.h | 2 +- cpp/csp/python/PyOutputProxy.h | 2 +- cpp/csp/python/PyPushInputAdapter.h | 2 +- cpp/csp/python/PyStructFastList.h | 2 +- cpp/csp/python/PyStructList.h | 2 +- cpp/csp/python/adapters/CMakeLists.txt | 21 ++++ cpp/tests/extensions/CMakeLists.txt | 2 + .../test_ext_adapter/CMakeLists.txt | 0 .../extensions/test_ext_node/CMakeLists.txt | 106 ++++++++++++++++++ .../extensions/test_ext_node/accumulator.cpp | 69 ++++++++++++ 73 files changed, 331 insertions(+), 120 deletions(-) create mode 100644 cpp/tests/extensions/CMakeLists.txt create mode 100644 cpp/tests/extensions/test_ext_adapter/CMakeLists.txt create mode 100644 cpp/tests/extensions/test_ext_node/CMakeLists.txt create mode 100644 cpp/tests/extensions/test_ext_node/accumulator.cpp diff --git a/cpp/csp/adapters/kafka/KafkaAdapterManager.h b/cpp/csp/adapters/kafka/KafkaAdapterManager.h index bf4e23158..f6b7f03c9 100644 --- a/cpp/csp/adapters/kafka/KafkaAdapterManager.h +++ b/cpp/csp/adapters/kafka/KafkaAdapterManager.h @@ -3,6 +3,7 @@ #include #include +#include #include #include #include @@ -11,6 +12,7 @@ #include #include + namespace RdKafka { @@ -47,7 +49,7 @@ struct KafkaStatusMessageTypeTraits using KafkaStatusMessageType = csp::Enum; //Top level AdapterManager object for all kafka adapters in the engine -class CSP_PUBLIC KafkaAdapterManager final : public csp::AdapterManager +class CSPKAFKAADAPTERIMPL_EXPORT KafkaAdapterManager final : public csp::AdapterManager { public: KafkaAdapterManager( csp::Engine * engine, const Dictionary & properties ); diff --git a/cpp/csp/adapters/parquet/DialectGenericListReaderInterface.h b/cpp/csp/adapters/parquet/DialectGenericListReaderInterface.h index 61b77cd85..417e080e3 100644 --- a/cpp/csp/adapters/parquet/DialectGenericListReaderInterface.h +++ b/cpp/csp/adapters/parquet/DialectGenericListReaderInterface.h @@ -2,6 +2,7 @@ #define _IN_CSP_ADAPTERS_PARQUET_DialectGenericListReaderInterface_H #include +#include #include #include #include @@ -9,7 +10,7 @@ namespace csp::adapters::parquet { -class DialectGenericListReaderInterface +class CSPPARQUETADAPTERIMPL_EXPORT DialectGenericListReaderInterface { public: using Ptr = std::shared_ptr; @@ -25,7 +26,7 @@ class DialectGenericListReaderInterface }; template< typename T > -class CSP_PUBLIC TypedDialectGenericListReaderInterface : public DialectGenericListReaderInterface +class CSPPARQUETADAPTERIMPL_EXPORT TypedDialectGenericListReaderInterface : public DialectGenericListReaderInterface { public: using Ptr = std::shared_ptr>; diff --git a/cpp/csp/adapters/parquet/ParquetInputAdapterManager.h b/cpp/csp/adapters/parquet/ParquetInputAdapterManager.h index 8f3effa1e..479eac517 100644 --- a/cpp/csp/adapters/parquet/ParquetInputAdapterManager.h +++ b/cpp/csp/adapters/parquet/ParquetInputAdapterManager.h @@ -4,6 +4,7 @@ #include #include #include +#include #include #include #include @@ -18,7 +19,7 @@ namespace csp::adapters::parquet //Top level AdapterManager object for all parquet adapters in the engine -class CSP_PUBLIC ParquetInputAdapterManager final : public csp::AdapterManager +class CSPPARQUETADAPTERIMPL_EXPORT ParquetInputAdapterManager final : public csp::AdapterManager { public: using GeneratorPtr = csp::Generator::Ptr; diff --git a/cpp/csp/adapters/parquet/ParquetOutputAdapterManager.h b/cpp/csp/adapters/parquet/ParquetOutputAdapterManager.h index b7fe029f4..2ac6139bd 100644 --- a/cpp/csp/adapters/parquet/ParquetOutputAdapterManager.h +++ b/cpp/csp/adapters/parquet/ParquetOutputAdapterManager.h @@ -4,6 +4,7 @@ #include #include #include +#include #include #include #include @@ -21,7 +22,7 @@ class ParquetOutputFilenameAdapter; class ParquetDictBasketOutputWriter; //Top level AdapterManager object for all parquet adapters in the engine -class CSP_PUBLIC ParquetOutputAdapterManager final : public csp::AdapterManager +class CSPPARQUETADAPTERIMPL_EXPORT ParquetOutputAdapterManager final : public csp::AdapterManager { public: using FileVisitorCallback = std::function; diff --git a/cpp/csp/adapters/websocket/ClientAdapterManager.h b/cpp/csp/adapters/websocket/ClientAdapterManager.h index b2b15fa78..3930f24e0 100644 --- a/cpp/csp/adapters/websocket/ClientAdapterManager.h +++ b/cpp/csp/adapters/websocket/ClientAdapterManager.h @@ -40,7 +40,7 @@ struct WebsocketClientStatusTypeTraits using ClientStatusType = Enum; -class CSP_PUBLIC ClientAdapterManager final : public AdapterManager +class CSPWEBSOCKETADAPTERIMPL_EXPORT ClientAdapterManager final : public AdapterManager { public: ClientAdapterManager( diff --git a/cpp/csp/core/BasicAllocator.h b/cpp/csp/core/BasicAllocator.h index 029518a7c..2f7648f71 100644 --- a/cpp/csp/core/BasicAllocator.h +++ b/cpp/csp/core/BasicAllocator.h @@ -15,7 +15,7 @@ namespace csp { // Extremely basic non-thread safe fixed-size allocator -class CSP_PUBLIC BasicAllocator +class CSPIMPL_EXPORT BasicAllocator { public: //elemsize is size of a single alloc, blockSize is number of elements to diff --git a/cpp/csp/core/CMakeLists.txt b/cpp/csp/core/CMakeLists.txt index 592ca9b60..03bfd0ebe 100644 --- a/cpp/csp/core/CMakeLists.txt +++ b/cpp/csp/core/CMakeLists.txt @@ -33,4 +33,4 @@ install(TARGETS csp_core RUNTIME DESTINATION ${CSP_RUNTIME_INSTALL_SUBDIR} LIBRARY DESTINATION lib/ ) -install(FILES ${CMAKE_CURRENT_BINARY_DIR}/cpp/csp/core/Config.h DESTINATION include/csp/core) +install(FILES ${CMAKE_CURRENT_BINARY_DIR}/cpp/csp/core/Config.h DESTINATION include/csp/core) \ No newline at end of file diff --git a/cpp/csp/core/DynamicBitSet.h b/cpp/csp/core/DynamicBitSet.h index eb4a950fc..95258556e 100644 --- a/cpp/csp/core/DynamicBitSet.h +++ b/cpp/csp/core/DynamicBitSet.h @@ -9,7 +9,7 @@ namespace csp { template -class CSP_PUBLIC DynamicBitSet +class CSPIMPL_EXPORT DynamicBitSet { public: diff --git a/cpp/csp/core/Enum.h b/cpp/csp/core/Enum.h index 428dadee2..bd563123f 100644 --- a/cpp/csp/core/Enum.h +++ b/cpp/csp/core/Enum.h @@ -73,7 +73,7 @@ bool UnknownOnInvalidValue(long) { return false; } START_PACKED template -struct CSP_PUBLIC Enum : public EnumTraits +struct CSPTYPESIMPL_EXPORT Enum : public EnumTraits { using EnumV = typename EnumTraits::_enum; using Mapping = std::vector; diff --git a/cpp/csp/core/EnumBitSet.h b/cpp/csp/core/EnumBitSet.h index 49c0fdac5..461bf54a9 100644 --- a/cpp/csp/core/EnumBitSet.h +++ b/cpp/csp/core/EnumBitSet.h @@ -14,7 +14,7 @@ namespace csp //Utility class to hold enums as a bitmask ( where enum values are incremental from 0 ) //enum must have a NUM_TYPES entry for number of entries template< typename EnumT > -class CSP_PUBLIC EnumBitSet +class CSPTYPESIMPL_EXPORT EnumBitSet { using value_type = uint64_t; diff --git a/cpp/csp/core/Generator.h b/cpp/csp/core/Generator.h index fabd1e8ec..257d53b12 100644 --- a/cpp/csp/core/Generator.h +++ b/cpp/csp/core/Generator.h @@ -7,7 +7,7 @@ namespace csp { template< typename V, typename ...Args > -class CSP_PUBLIC Generator +class CSPIMPL_EXPORT Generator { public: using Ptr = std::shared_ptr>; diff --git a/cpp/csp/core/Platform.h b/cpp/csp/core/Platform.h index eb6e0c058..170bb2991 100644 --- a/cpp/csp/core/Platform.h +++ b/cpp/csp/core/Platform.h @@ -4,6 +4,15 @@ #include #include +// cmake autogenerated export files +#include +#include + +#include +#include +#include + + //TODO move Likely.h defines into Platform.h #ifdef WIN32 #define NOMINMAX @@ -14,20 +23,7 @@ #undef ERROR #undef GetMessage -#define CSP_LOCAL -#define CSP_PUBLIC __declspec(dllexport) - -#ifdef CSPTYPESIMPL_EXPORTS -#define CSPTYPESIMPL_EXPORT __declspec(dllexport) -#else -#define CSPTYPESIMPL_EXPORT __declspec(dllimport) -#endif - -#ifdef CSPIMPL_EXPORTS -#define CSPIMPL_EXPORT __declspec(dllexport) -#else -#define CSPIMPL_EXPORT __declspec(dllimport) -#endif +#define CSP_PUBLIC __declspec(dllexport) // just for exceptions! #define START_PACKED __pragma( pack(push, 1) ) #define END_PACKED __pragma( pack(pop)) @@ -90,10 +86,7 @@ inline uint8_t ffs(uint64_t n) } #else -#define CSPIMPL_EXPORT __attribute__ ((visibility ("default"))) -#define CSPTYPESIMPL_EXPORT __attribute__ ((visibility ("default"))) -#define CSP_LOCAL __attribute__ ((visibility ("hidden"))) #define CSP_PUBLIC __attribute__ ((visibility ("default"))) #define START_PACKED diff --git a/cpp/csp/core/QueueWaiter.h b/cpp/csp/core/QueueWaiter.h index d8d40bb81..01e4bbc4c 100644 --- a/cpp/csp/core/QueueWaiter.h +++ b/cpp/csp/core/QueueWaiter.h @@ -14,7 +14,7 @@ namespace csp class TimeDelta; -class CSP_PUBLIC QueueWaiter +class CSPIMPL_EXPORT QueueWaiter { public: QueueWaiter() : m_eventsPending( false ) diff --git a/cpp/csp/core/TaggedPointerUnion.h b/cpp/csp/core/TaggedPointerUnion.h index 358bc1744..635001c32 100644 --- a/cpp/csp/core/TaggedPointerUnion.h +++ b/cpp/csp/core/TaggedPointerUnion.h @@ -26,7 +26,7 @@ struct IndexOf > template -class CSP_PUBLIC TaggedPointerUnion +class CSPIMPL_EXPORT TaggedPointerUnion { public: static inline constexpr size_t NUM_TAGS = sizeof...(Ts); diff --git a/cpp/csp/core/Time.h b/cpp/csp/core/Time.h index 0ac03fd0d..5f061c031 100644 --- a/cpp/csp/core/Time.h +++ b/cpp/csp/core/Time.h @@ -21,7 +21,7 @@ const int64_t NANOS_PER_SECOND = 1000000000; const int64_t SECONDS_PER_DAY = 86400; const int64_t NANOS_PER_DAY = NANOS_PER_SECOND * SECONDS_PER_DAY; -class CSP_PUBLIC TimeDelta +class CSPTYPESIMPL_EXPORT TimeDelta { public: constexpr TimeDelta() : TimeDelta( TimeDelta::NONE() ) {} @@ -165,7 +165,7 @@ inline std::ostream & operator <<( std::ostream &os, const TimeDelta & d ) return os; } -class CSP_PUBLIC Date +class CSPTYPESIMPL_EXPORT Date { public: Date() : Date( NONE() ) {} @@ -316,7 +316,7 @@ inline std::ostream & operator <<( std::ostream &os, const Date & d ) return os; } -class CSP_PUBLIC Time +class CSPTYPESIMPL_EXPORT Time { public: Time() : Time( -1 ) {} //NONE @@ -446,7 +446,7 @@ inline std::ostream & operator <<( std::ostream &os, const Time & t ) // Time is internally stored as an int64_t nanoseconds since 1970. // All DateTime objects are stored as UTC and should be treated as such -class CSP_PUBLIC DateTime +class CSPTYPESIMPL_EXPORT DateTime { public: DateTime() : DateTime( DateTime::NONE() ) {} @@ -597,7 +597,7 @@ inline std::ostream & operator <<( std::ostream &os, const DateTime & dt ) //Helper class to extract day/month/year/etc info from raw timestamp //ie DateTimeEx dte( existingDt ) //dte.day, etc etc -class CSP_PUBLIC DateTimeEx : public DateTime +class CSPTYPESIMPL_EXPORT DateTimeEx : public DateTime { public: DateTimeEx( const DateTime & dt ); diff --git a/cpp/csp/engine/AdapterManager.h b/cpp/csp/engine/AdapterManager.h index 52e243965..a1c323319 100644 --- a/cpp/csp/engine/AdapterManager.h +++ b/cpp/csp/engine/AdapterManager.h @@ -17,7 +17,7 @@ class AdapterManager; class Engine; -class CSP_PUBLIC ManagedSimInputAdapter : public InputAdapter +class CSPIMPL_EXPORT ManagedSimInputAdapter : public InputAdapter { public: ManagedSimInputAdapter( csp::Engine *engine, const CspTypePtr &type, AdapterManager *manager, PushMode pushMode ); @@ -94,7 +94,7 @@ bool ManagedSimInputAdapter::pushNullTick() return true; } -class CSP_PUBLIC AdapterManager : public EngineOwned +class CSPIMPL_EXPORT AdapterManager : public EngineOwned { public: AdapterManager( csp::Engine * ); diff --git a/cpp/csp/engine/AlarmInputAdapter.h b/cpp/csp/engine/AlarmInputAdapter.h index f0428bac9..d34d16418 100644 --- a/cpp/csp/engine/AlarmInputAdapter.h +++ b/cpp/csp/engine/AlarmInputAdapter.h @@ -9,7 +9,7 @@ namespace csp { template -class CSP_PUBLIC AlarmInputAdapter final : public InputAdapter +class CSPIMPL_EXPORT AlarmInputAdapter final : public InputAdapter { public: AlarmInputAdapter( Engine * engine, CspTypePtr & type ) : InputAdapter( engine, type, PushMode::NON_COLLAPSING ) diff --git a/cpp/csp/engine/BasketInfo.h b/cpp/csp/engine/BasketInfo.h index cd4da8a0b..10c14e7c1 100644 --- a/cpp/csp/engine/BasketInfo.h +++ b/cpp/csp/engine/BasketInfo.h @@ -13,7 +13,7 @@ namespace csp class Node; -class CSP_PUBLIC InputBasketInfo +class CSPIMPL_EXPORT InputBasketInfo { using TickedInputs = std::vector; @@ -189,7 +189,7 @@ class CSP_PUBLIC InputBasketInfo bool m_isDynamic; }; -class CSP_PUBLIC DynamicInputBasketInfo : public InputBasketInfo +class CSPIMPL_EXPORT DynamicInputBasketInfo : public InputBasketInfo { public: using ChangeCallback = std::function; @@ -228,7 +228,7 @@ class CSP_PUBLIC DynamicInputBasketInfo : public InputBasketInfo TimeDelta m_timeWindowPolicy; }; -class CSP_PUBLIC OutputBasketInfo +class CSPIMPL_EXPORT OutputBasketInfo { public: OutputBasketInfo( CspTypePtr & type, Node * node, size_t size, bool isDynamic = false ); @@ -255,7 +255,7 @@ class CSP_PUBLIC OutputBasketInfo bool m_isDynamic; }; -class CSP_PUBLIC DynamicOutputBasketInfo : public OutputBasketInfo +class CSPIMPL_EXPORT DynamicOutputBasketInfo : public OutputBasketInfo { public: DynamicOutputBasketInfo( CspTypePtr & type, Node * node ); diff --git a/cpp/csp/engine/Consumer.h b/cpp/csp/engine/Consumer.h index 22bcc077d..d5b3f5714 100644 --- a/cpp/csp/engine/Consumer.h +++ b/cpp/csp/engine/Consumer.h @@ -14,7 +14,7 @@ namespace csp class InputAdapter; //Base of either regular Nodes or output adapters -class CSP_PUBLIC Consumer +class CSPIMPL_EXPORT Consumer { public: Consumer( Engine * ); diff --git a/cpp/csp/engine/CppNode.h b/cpp/csp/engine/CppNode.h index 22a7a0a0c..6cc2c959d 100644 --- a/cpp/csp/engine/CppNode.h +++ b/cpp/csp/engine/CppNode.h @@ -13,7 +13,7 @@ namespace csp //CppNode is used specifically for C++ defined Nodes, and should only be used //for definig c++ nodes using the macros defined at the end -class CSP_PUBLIC CppNode : public csp::Node +class CSPIMPL_EXPORT CppNode : public csp::Node { public: using Shape = std::variant>; diff --git a/cpp/csp/engine/CspEnum.h b/cpp/csp/engine/CspEnum.h index 05e236c7f..f6b70a4d9 100644 --- a/cpp/csp/engine/CspEnum.h +++ b/cpp/csp/engine/CspEnum.h @@ -15,7 +15,7 @@ namespace csp class CspEnumMeta; -class CSP_PUBLIC CspEnumInstance +class CSPTYPESIMPL_EXPORT CspEnumInstance { public: CspEnumInstance( std::string name, int64_t value, csp::CspEnumMeta * meta ) : m_name( name ), m_value( value ), m_meta( meta ) {} @@ -35,7 +35,7 @@ class CSP_PUBLIC CspEnumInstance //As an optimization we do NOT attach meta or value to every instance of an enum. Instead, the enum //holds only a pointer to a singleton CspEnumInstance, which holds the value, name, and meta pointer. -class CSP_PUBLIC CspEnum +class CSPTYPESIMPL_EXPORT CspEnum { public: CspEnum(); @@ -59,7 +59,7 @@ class CSP_PUBLIC CspEnum std::ostream &operator<<( std::ostream &os, const CspEnum & rhs ); -class CSP_PUBLIC CspEnumMeta +class CSPTYPESIMPL_EXPORT CspEnumMeta { public: using ValueDef = std::unordered_map; diff --git a/cpp/csp/engine/CspType.h b/cpp/csp/engine/CspType.h index c3c070bbf..1d1998df2 100644 --- a/cpp/csp/engine/CspType.h +++ b/cpp/csp/engine/CspType.h @@ -15,7 +15,7 @@ namespace csp class CspStringType; -class CSP_PUBLIC CspType +class CSPTYPESIMPL_EXPORT CspType { public: @@ -116,7 +116,7 @@ class CSP_PUBLIC CspType Type m_type; }; -class CSP_PUBLIC CspStringType : public CspType +class CSPTYPESIMPL_EXPORT CspStringType : public CspType { public: CspStringType(bool isBytes) @@ -135,7 +135,7 @@ class CspEnum; class CspEnumMeta; -class CSP_PUBLIC CspEnumType : public CspType +class CSPTYPESIMPL_EXPORT CspEnumType : public CspType { public: CspEnumType( std::shared_ptr & meta ) : CspType( CspType::Type::ENUM ), @@ -155,7 +155,7 @@ using StructPtr = TypedStructPtr; class StructMeta; -class CSP_PUBLIC CspStructType : public CspType +class CSPTYPESIMPL_EXPORT CspStructType : public CspType { public: CspStructType( const std::shared_ptr & meta ) : CspType( CspType::Type::STRUCT ), @@ -168,7 +168,7 @@ class CSP_PUBLIC CspStructType : public CspType std::shared_ptr m_meta; }; -class CSP_PUBLIC CspArrayType : public CspType +class CSPTYPESIMPL_EXPORT CspArrayType : public CspType { public: CspArrayType( CspTypePtr elemType, bool isPyStructFastList = false ) : diff --git a/cpp/csp/engine/CycleStepTable.h b/cpp/csp/engine/CycleStepTable.h index 435377646..994dda240 100644 --- a/cpp/csp/engine/CycleStepTable.h +++ b/cpp/csp/engine/CycleStepTable.h @@ -12,7 +12,7 @@ namespace csp class Consumer; class Profiler; -class CSP_PUBLIC CycleStepTable +class CSPIMPL_EXPORT CycleStepTable { public: CycleStepTable(); diff --git a/cpp/csp/engine/DialectGenericType.h b/cpp/csp/engine/DialectGenericType.h index 0aa0dfad0..1ffdb9aaf 100644 --- a/cpp/csp/engine/DialectGenericType.h +++ b/cpp/csp/engine/DialectGenericType.h @@ -5,6 +5,7 @@ #include #include + namespace csp { diff --git a/cpp/csp/engine/Dictionary.h b/cpp/csp/engine/Dictionary.h index faf6193f6..7067d669d 100644 --- a/cpp/csp/engine/Dictionary.h +++ b/cpp/csp/engine/Dictionary.h @@ -23,7 +23,7 @@ using DictionaryPtr = std::shared_ptr; class StructMeta; using StructMetaPtr = std::shared_ptr; -class CSP_PUBLIC Dictionary +class CSPTYPESIMPL_EXPORT Dictionary { public: struct Data; diff --git a/cpp/csp/engine/DynamicEngine.h b/cpp/csp/engine/DynamicEngine.h index aa2b4130b..764f67a61 100644 --- a/cpp/csp/engine/DynamicEngine.h +++ b/cpp/csp/engine/DynamicEngine.h @@ -10,7 +10,7 @@ namespace csp { -class CSP_PUBLIC DynamicEngine final : public Engine +class CSPIMPL_EXPORT DynamicEngine final : public Engine { public: using ShutdownFn = std::function; diff --git a/cpp/csp/engine/DynamicNode.h b/cpp/csp/engine/DynamicNode.h index 6434cf26c..be6abbbe6 100644 --- a/cpp/csp/engine/DynamicNode.h +++ b/cpp/csp/engine/DynamicNode.h @@ -18,7 +18,7 @@ class DynamicEngine; //external inputs and triggering a cycle step. //All dynamic engine input adapters as well as all external timeseries wired into dynamic are registered as inputs //into the DynanicNode instance so that it can invoke cycle step at the appropriate times. -class CSP_PUBLIC DynamicNode final : public Node +class CSPIMPL_EXPORT DynamicNode final : public Node { public: using Outputs = std::vector; diff --git a/cpp/csp/engine/Engine.h b/cpp/csp/engine/Engine.h index 23afb256a..a9ed9b38d 100644 --- a/cpp/csp/engine/Engine.h +++ b/cpp/csp/engine/Engine.h @@ -24,7 +24,7 @@ class TimeSeriesProvider; class Engine; class RootEngine; -struct CSP_PUBLIC EngineOwned +struct CSPIMPL_EXPORT EngineOwned { //force objects derived from EngineOwned to go through engine createOwnedObject methods //little trick here to force all derivations to fail @@ -35,7 +35,7 @@ struct CSP_PUBLIC EngineOwned void operator delete( void* ptr ) { ::operator delete(ptr); } }; -class CSP_PUBLIC Engine +class CSPIMPL_EXPORT Engine { using AdapterManagers = std::vector>; using InputAdapters = std::vector>; diff --git a/cpp/csp/engine/Enums.h b/cpp/csp/engine/Enums.h index 0a45bb28d..b61fcdba9 100644 --- a/cpp/csp/engine/Enums.h +++ b/cpp/csp/engine/Enums.h @@ -8,7 +8,7 @@ namespace csp { // NOTE this must align with the python side Enum definition /// -struct CSP_PUBLIC PushModeTraits +struct CSPIMPL_EXPORT PushModeTraits { enum _enum : unsigned char { diff --git a/cpp/csp/engine/EventPropagator.h b/cpp/csp/engine/EventPropagator.h index 77e45ca4c..7c81b277a 100644 --- a/cpp/csp/engine/EventPropagator.h +++ b/cpp/csp/engine/EventPropagator.h @@ -10,7 +10,7 @@ namespace csp class Consumer; -class CSP_PUBLIC EventPropagator +class CSPIMPL_EXPORT EventPropagator { public: EventPropagator(); diff --git a/cpp/csp/engine/Feedback.h b/cpp/csp/engine/Feedback.h index c8a128a5b..be5e9b5fa 100644 --- a/cpp/csp/engine/Feedback.h +++ b/cpp/csp/engine/Feedback.h @@ -12,7 +12,7 @@ template class FeedbackInputAdapter; template -class CSP_PUBLIC FeedbackOutputAdapter final : public OutputAdapter +class CSPIMPL_EXPORT FeedbackOutputAdapter final : public OutputAdapter { public: FeedbackOutputAdapter( csp::Engine * engine, @@ -29,7 +29,7 @@ class CSP_PUBLIC FeedbackOutputAdapter final : public OutputAdapter }; template -class CSP_PUBLIC FeedbackInputAdapter final : public InputAdapter +class CSPIMPL_EXPORT FeedbackInputAdapter final : public InputAdapter { public: using InputAdapter::InputAdapter; diff --git a/cpp/csp/engine/GraphOutputAdapter.h b/cpp/csp/engine/GraphOutputAdapter.h index 14e869361..7d21211d3 100644 --- a/cpp/csp/engine/GraphOutputAdapter.h +++ b/cpp/csp/engine/GraphOutputAdapter.h @@ -15,7 +15,7 @@ namespace csp //GraphOutputAdapters are also special in that they are registered in both a dynamic engine and the root engine as sahred_ptr. They make it into root //so that the root processes them at the end of the csp.run call ( dynamics could be shutdown by then ). We also register in root //to ensure we dont hit key clashses. -class CSP_PUBLIC GraphOutputAdapter : public OutputAdapter, public std::enable_shared_from_this +class CSPIMPL_EXPORT GraphOutputAdapter : public OutputAdapter, public std::enable_shared_from_this { public: GraphOutputAdapter( csp::Engine * engine, int32_t tickCount, TimeDelta tickHistory ); diff --git a/cpp/csp/engine/InputAdapter.h b/cpp/csp/engine/InputAdapter.h index 462000f2c..357308ef1 100644 --- a/cpp/csp/engine/InputAdapter.h +++ b/cpp/csp/engine/InputAdapter.h @@ -12,7 +12,7 @@ namespace csp class Consumer; -class CSP_PUBLIC InputAdapter : public TimeSeriesProvider, public EngineOwned +class CSPIMPL_EXPORT InputAdapter : public TimeSeriesProvider, public EngineOwned { public: InputAdapter( Engine * engine, const CspTypePtr & type, PushMode pushMode ); diff --git a/cpp/csp/engine/Node.h b/cpp/csp/engine/Node.h index 73bbaadb3..01e5c11fd 100644 --- a/cpp/csp/engine/Node.h +++ b/cpp/csp/engine/Node.h @@ -25,7 +25,7 @@ struct NodeDef INOUT_ID_TYPE numOutputs; }; -class CSP_PUBLIC Node : public Consumer, public EngineOwned +class CSPIMPL_EXPORT Node : public Consumer, public EngineOwned { public: Node( NodeDef def, Engine * ); diff --git a/cpp/csp/engine/OutputAdapter.h b/cpp/csp/engine/OutputAdapter.h index 53c993f1d..d8debc836 100644 --- a/cpp/csp/engine/OutputAdapter.h +++ b/cpp/csp/engine/OutputAdapter.h @@ -10,7 +10,7 @@ namespace csp class TimeSeriesProvider; -class CSP_PUBLIC OutputAdapter : public Consumer, public EngineOwned +class CSPIMPL_EXPORT OutputAdapter : public Consumer, public EngineOwned { public: OutputAdapter( csp::Engine * engine ); diff --git a/cpp/csp/engine/PendingPushEvents.h b/cpp/csp/engine/PendingPushEvents.h index 95b43e43b..4f7820e25 100644 --- a/cpp/csp/engine/PendingPushEvents.h +++ b/cpp/csp/engine/PendingPushEvents.h @@ -11,7 +11,7 @@ namespace csp struct PushGroup; class PushInputAdapters; -class CSP_PUBLIC PendingPushEvents +class CSPIMPL_EXPORT PendingPushEvents { public: PendingPushEvents(); diff --git a/cpp/csp/engine/Profiler.h b/cpp/csp/engine/Profiler.h index 71044aba8..d05bb43e5 100644 --- a/cpp/csp/engine/Profiler.h +++ b/cpp/csp/engine/Profiler.h @@ -13,7 +13,7 @@ namespace csp { -class CSP_PUBLIC Profiler +class CSPIMPL_EXPORT Profiler { // All times are returned as doubles representing time in seconds diff --git a/cpp/csp/engine/PullInputAdapter.h b/cpp/csp/engine/PullInputAdapter.h index 455e21aa0..bde322c54 100644 --- a/cpp/csp/engine/PullInputAdapter.h +++ b/cpp/csp/engine/PullInputAdapter.h @@ -10,7 +10,7 @@ namespace csp { template -class CSP_PUBLIC PullInputAdapter : public InputAdapter +class CSPIMPL_EXPORT PullInputAdapter : public InputAdapter { public: PullInputAdapter( Engine * engine, CspTypePtr & type, PushMode pushMode ) : InputAdapter( engine, type, pushMode ) diff --git a/cpp/csp/engine/PushEvent.h b/cpp/csp/engine/PushEvent.h index 6e75ce7e0..862f8c7e6 100644 --- a/cpp/csp/engine/PushEvent.h +++ b/cpp/csp/engine/PushEvent.h @@ -9,7 +9,7 @@ namespace csp class PushInputAdapter; -struct CSP_PUBLIC PushEvent +struct CSPIMPL_EXPORT PushEvent { PushEvent( PushInputAdapter *adapter ) : m_adapter( adapter ), next( nullptr ) {} @@ -26,7 +26,7 @@ struct CSP_PUBLIC PushEvent }; template -struct TypedPushEvent : public PushEvent +struct CSPIMPL_EXPORT TypedPushEvent : public PushEvent { TypedPushEvent( PushInputAdapter *adapter, T &&d ) : PushEvent( adapter ), diff --git a/cpp/csp/engine/PushInputAdapter.h b/cpp/csp/engine/PushInputAdapter.h index d17233a19..4c049aab2 100644 --- a/cpp/csp/engine/PushInputAdapter.h +++ b/cpp/csp/engine/PushInputAdapter.h @@ -76,7 +76,7 @@ class PushBatch : public SRMWLockFreeQueue::Batch PushGroup * m_group; //used for assertion check }; -class CSP_PUBLIC PushInputAdapter : public InputAdapter +class CSPIMPL_EXPORT PushInputAdapter : public InputAdapter { public: PushInputAdapter( Engine * engine, CspTypePtr & type, PushMode pushMode, diff --git a/cpp/csp/engine/PushPullInputAdapter.h b/cpp/csp/engine/PushPullInputAdapter.h index 2f08da998..5e1dd5743 100644 --- a/cpp/csp/engine/PushPullInputAdapter.h +++ b/cpp/csp/engine/PushPullInputAdapter.h @@ -10,7 +10,7 @@ namespace csp //A variation of PushInputAdapter that lets you schedule historical data as well. Used for adapters //that can replay history and switch to realtime seamlessly ( ie kafka ) -class CSP_PUBLIC PushPullInputAdapter : public PushInputAdapter +class CSPIMPL_EXPORT PushPullInputAdapter : public PushInputAdapter { public: PushPullInputAdapter( Engine * engine, CspTypePtr & type, PushMode pushMode, diff --git a/cpp/csp/engine/RootEngine.h b/cpp/csp/engine/RootEngine.h index d8c10be7b..ab8c3b6f7 100644 --- a/cpp/csp/engine/RootEngine.h +++ b/cpp/csp/engine/RootEngine.h @@ -34,7 +34,7 @@ class EndCycleListener bool m_dirty = false; }; -class CSP_PUBLIC RootEngine : public Engine +class CSPIMPL_EXPORT RootEngine : public Engine { using PushEventQueue = SRMWLockFreeQueue; diff --git a/cpp/csp/engine/Scheduler.h b/cpp/csp/engine/Scheduler.h index 438c489a6..8a18352e6 100644 --- a/cpp/csp/engine/Scheduler.h +++ b/cpp/csp/engine/Scheduler.h @@ -15,7 +15,7 @@ namespace csp class InputAdapter; -class CSP_PUBLIC Scheduler +class CSPIMPL_EXPORT Scheduler { struct Event; diff --git a/cpp/csp/engine/StatusAdapter.h b/cpp/csp/engine/StatusAdapter.h index aebacc3f6..bedb765ee 100644 --- a/cpp/csp/engine/StatusAdapter.h +++ b/cpp/csp/engine/StatusAdapter.h @@ -30,7 +30,7 @@ struct StatusLevelTraits using StatusLevel = csp::Enum; -class CSP_PUBLIC StatusAdapter : public PushInputAdapter +class CSPIMPL_EXPORT StatusAdapter : public PushInputAdapter { public: StatusAdapter( Engine * engine, CspTypePtr & type, PushMode pushMode, PushGroup * group = nullptr ) : PushInputAdapter( engine, type, pushMode, group ) diff --git a/cpp/csp/engine/Struct.h b/cpp/csp/engine/Struct.h index 692ad842e..3e8a2c308 100644 --- a/cpp/csp/engine/Struct.h +++ b/cpp/csp/engine/Struct.h @@ -19,7 +19,7 @@ class TypedStructPtr; using StructPtr = TypedStructPtr; -class CSP_PUBLIC StructField +class CSPTYPESIMPL_EXPORT StructField { public: @@ -114,7 +114,7 @@ class CSP_PUBLIC StructField using StructFieldPtr = std::shared_ptr; template -class CSP_PUBLIC NativeStructField : public StructField +class CSPTYPESIMPL_EXPORT NativeStructField : public StructField { static_assert( CspType::Type::fromCType::type <= CspType::Type::MAX_NATIVE_TYPE ); static_assert( sizeof(T) == alignof(T) ); @@ -177,7 +177,7 @@ using TimeDeltaStructField = NativeStructField; using DateStructField = NativeStructField; using TimeStructField = NativeStructField