VR-Engage  2.2
Loading...
Searching...
No Matches
cigiPublisherTemplate.h
Go to the documentation of this file.
1/*******************************************************************************
2** Copyright (c) 2024 MAK Technologies, Inc.
3** All rights reserved.
4*******************************************************************************/
5#pragma once
6
8
9namespace makVre
10{
11
12//! @brief Template for creating CigiPublisher classes.
13//!
14//! Handles implementation of cigi(), createCigi(), shared() and verifySharedType()
15//!
16//! The final DATA_CREATOR_T type parameter is optional. Use the default DtCigiDataCreatorStub
17//! when implementing an abstract base Publisher class using an abstract base CIGI_t type.
18//! Use DtCigiDataCreator when implementing a concreate/final Publisher class (typcially versioned).
19//!
20//! @tparam CIGI_T Type of the CIGI packet class to be managed by this Publisher
21//! @tparam SELF_T Type of the class implementing this template
22//! @tparam SUPER_T Parent Publisher from which SELF_T Publisher type should be derived, default is DtCigiPublisherBase
23//! @tparam DATA_CREATOR_T One of DtCigiDataCreatorStub or DtCigiDataCreator
24template <class CIGI_T, class SELF_T, class SUPER_T = DtCigiPublisherBase, class DATA_CREATOR_T = DtCigiDataCreatorStub>
25class DtCigiPublisherTemplate : public DtSpSubClass<SELF_T, SUPER_T>
26{
27public:
28 using Cigi = CIGI_T;
30
32 virtual ~DtCigiPublisherTemplate() override {}
33
34 CigiData* cigi() { return static_cast<CigiData*>(this->cigiBase()); }
35 CigiData* const cigi() const { return static_cast<CigiData*>(this->cigiBase()); }
36
37 CigiData* shared() { return static_cast<CigiData*>(this->mySharedData.get()); }
38 CigiData* const shared() const { return static_cast<CigiData*>(this->mySharedData.get()); }
39
40protected:
42 {
43 DATA_CREATOR_T creator;
44 return creator.create<DtCigiDataBase, CigiData>();
45 }
46
47 bool verifySharedType() override { return bool(this->cast<CigiData>(this->mySharedData)); }
48};
49
50} // namespace makVre
Base CigiData class used by DtCigiDataTemplate.
Definition cigiData.h:25
Template used to compose a CigiData class for a specific CIGI type.
Definition cigiData.h:53
DtCigiDataBase * cigiBase()
CigiBasePtr mySharedData
Definition cigiPublisherBase.h:164
DtCigiDataTemplate< CIGI_T, SELF_T > CigiData
Definition cigiPublisherTemplate.h:29
DtCigiDataBase * createCigi() override
Definition cigiPublisherTemplate.h:41
DtCigiPublisherTemplate()
Definition cigiPublisherTemplate.h:31
CigiData * cigi()
Definition cigiPublisherTemplate.h:34
CigiData *const cigi() const
Definition cigiPublisherTemplate.h:35
CIGI_T Cigi
Definition cigiPublisherTemplate.h:28
virtual ~DtCigiPublisherTemplate() override
Definition cigiPublisherTemplate.h:32
bool verifySharedType() override
Definition cigiPublisherTemplate.h:47
CigiData * shared()
Definition cigiPublisherTemplate.h:37
CigiData *const shared() const
Definition cigiPublisherTemplate.h:38
static std::shared_ptr< AS_T > cast(Sptr p)
Safely casts a base shared pointer to a derived type.
Definition baseClass.h:123
static std::shared_ptr< DtBaseCreator< SELF_T > > & creator()
Definition baseClass.h:251
Include export definitions for this library.
Definition glsVreMessageUtil.h:49