Files
qt6-migration-pipeline/external/rti_connext_dds-7.7.0/include/ndds/event/event_activeDatabase.h
T
torsten 77c67c12ca Execute the same instructions but now for tools in folders you are getti
Entire-Metadata: .entire/metadata/fb87247f-2a75-407e-b336-cbc8c20ba5a6
Entire-Session: fb87247f-2a75-407e-b336-cbc8c20ba5a6
Entire-Strategy: manual-commit
2026-09-24 16:24:51 +00:00

236 lines
7.4 KiB
C

/*
* (c) Copyright, Real-Time Innovations, 2002-2024.
* All rights reserved.
*
* No duplications, whole or partial, manual or electronic, may be made
* without express written permission. Any such copies, or
* revisions thereof, must display this notice unaltered.
* This code contains trade secrets of Real-Time Innovations, Inc.
*/
#ifndef event_activeDatabase_h
#define event_activeDatabase_h
#ifndef reda_database_h
#include "reda/reda_database.h"
#endif
#ifndef event_dll_h
#include "event/event_dll.h"
#endif
#ifndef event_activeObject_h
#include "event/event_activeObject.h"
#endif
#ifndef event_smartTimer_h
#include "event/event_smartTimer.h"
#endif
#ifndef osapi_threadFactory_h
#include "osapi/osapi_threadFactory.h"
#endif
#ifdef __cplusplus
extern "C" {
#endif
struct RTIEventActiveDatabase;
struct RTIEventTimer;
/*e \file
\brief Database with reaper thread
*/
/*e \defgroup RTIEventActiveDatabaseClass RTIEventActiveDatabase
\ingroup RTIEventActiveObjectClass
\brief An implementation of RTIEventActiveObject, and a derived class of
REDADatabase, with *1* reaper thread for periodic clean up.
The reaper thread may be woken up earlier too if smart timer is available
on the platform.
@note Opaque class
*/
/*e \defgroup RTIEventActiveDatabasePropertyClass RTIEventActiveDatabaseProperty
\ingroup RTIEventActiveDatabaseClass
*/
/*e \ingroup RTIEventActiveDatabasePropertyClass
\brief public member fields
*/
struct RTIEventActiveDatabaseProperty {
/*e This class is a child of REDADatabase */
struct REDADatabaseProperty parent;
/*e And this object is active */
struct RTIEventActiveObjectProperty active;
/*e Garbage collection period
@todo consider spliting into slow and fast period
*/
struct RTINtpTime cleanupPeriod;
/*e @brief The thread participant identification.
Used to give a meaningful name to the thread.
*/
char threadParticipantId[RTI_OSAPI_THREAD_PARTICIPANT_ID_MAX_SIZE];
};
/*e \ingroup RTIEventActiveDatabasePropertyClass
\brief Use this initialize variable on the stack
Default garbage collection period: 30 sec
*/
#define RTI_EVENT_ACTIVE_DATABASE_PROPERTY_DEFAULT { \
REDA_DATABASE_PROPERTY_DEFAULT, \
RTI_EVENT_ACTIVE_OBJECT_PROPERTY_DEFAULT, \
{30, 0}, \
"#####", /* threadParticipantId */ \
}
struct RTIEventActiveDatabaseListener;/*forward declare */
/*e \ingroup RTIEventActiveDatabaseClass
\brief dtor
@pre database in RTI_EVENT_ACTIVE_OBJECT_STATE_STOPPED
@param me \b In. Must be RTIEventActiveDatabase cached from
RTIEventActiveDatabase_new.
@param worker \b In. The identity of "thread" that is deleting the database.
@return RTI_TRUE on successful deletion or RTI_FALSE on failure
@mtsafety <<delete>>
*/
extern RTIEventDllExport RTIBool
RTIEventActiveDatabase_delete(struct RTIEventActiveDatabase *me,
struct REDAWorker *worker);
/*e \ingroup RTIEventActiveDatabaseClass
\brief begin shutdown sequence
@pre In state RTI_EVENT_ACTIVE_OBJECT_STATE_RUNNING
@post In state RTI_EVENT_ACTIVE_OBJECT_STATE_SHUTDOWN
@param me \b In. Must be RTIEventActiveDatabase cached from
RTIEventActiveDatabase_new.
@param worker \b In. The identity of "thread" that is shutting down the
database.
@return RTI_TRUE on success
@mtsafety <<shutdown>>
*/
extern RTIEventDllExport RTIBool
RTIEventActiveDatabase_shutdown(struct RTIEventActiveDatabase *me,
struct REDAWorker *worker);
/*e \defgroup RTIEventActiveDatabaseListenerClass RTIEventActiveDatabaseListener
\ingroup RTIEventActiveDatabaseClass
\brief Implement this interface to be notified of active database state
changes.
*/
/*e \ingroup RTIEventActiveDatabaseListenerClass
\brief called when the active database is fully operational.
That is, you may not use an active database until this callback is called.
@pre database in RTI_EVENT_ACTIVE_OBJECT_STATE_RUNNING
@mtsafety <<singleThread>>
*/
typedef void (*RTIEventActiveDatabaseOnStartedCallback)(
struct RTIEventActiveDatabase *database, void *onStartedParam,
struct REDAWorker *worker);
/*e \ingroup RTIEventActiveDatabaseListenerClass
\brief called when the active database wakes up periodically, typically to
perform cleanup. You can have the Active DB thread perform other DB-ish
work, like cleaning up stale sample in the presentation layer.
@pre database in RTI_EVENT_ACTIVE_OBJECT_STATE_RUNNING
@mtsafety <<singleThread>>
*/
typedef void (*RTIEventActiveDatabaseOnWakeupCallback)(
const struct RTIEventActiveDatabaseListener* me,
struct REDAWorker *worker);
/*e \ingroup RTIEventActiveDatabaseListenerClass
\brief Child of RTIEventActiveObjectListener
*/
struct RTIEventActiveDatabaseListener {
/*e Parent is the first member */
struct RTIEventActiveObjectListener parent;
/*e Active database start-up is asynchronous, so use this method
to learn when the active database is fully operational.
*/
RTIEventActiveDatabaseOnStartedCallback onStarted;
/*e Associated with the onStarted() method */
void *onStartedParam;
RTIEventActiveDatabaseOnWakeupCallback onWakeup;
};
#define RTI_EVENT_ACTIVE_DATABASE_LISTENER_DEFAULT { \
RTI_EVENT_ACTIVE_OBJECT_LISTENER_DEFAULT, \
NULL, NULL, NULL }
/*e \ingroup RTIEventActiveDatabaseClass
\brief ctor
@post active database in REDA_ACTIVE_OBJECT_STATE_STARTING
@param workerFactory \b In.
@param adminEA \b In.
@param timer \b In. Event timer.
@param listener \b In. Listener to listen to database events.
Cannot be NULL.
@param property \b In. <<valueType>>
Contains optional detailed configuration
properties for the database. If NULL is passed, defaults are used.
@param worker \b In.
@param threadFactory \b In. The thread factory to create threads.
@mtsafety <<new>>
*/
extern RTIEventDllExport struct RTIEventActiveDatabase *
RTIEventActiveDatabase_new(
struct REDAWorkerFactory *workerFactory,
struct REDAExclusiveArea *adminEA,
struct RTIEventTimer *timer,
const struct RTIEventActiveDatabaseListener *listener,
const struct RTIEventActiveDatabaseProperty *property,
struct RTIOsapiThreadFactory *threadFactory,
struct REDAWorker *worker);
/*e \ingroup RTIEventActiveDatabaseClass
\brief Fill in the given property with the state of this database as
it was specified at creation time.
@pre All pointers must be valid.
@param property \b In. <<valueType>>
@param worker \b In.
@mtsafety safe.
*/
extern RTIEventDllExport void
RTIEventActiveDatabase_getProperty(
struct RTIEventActiveDatabase *me,
struct RTIEventActiveDatabaseProperty *property,
struct REDAWorker *worker);
/*e \ingroup RTIEventActiveDatabaseClass
\brief Force premature wakeup if using smart timer, so that garbage
collection can be performed now instead of having to wait until the
next wakeup time.
@mtsafety <<multiThreadSafe>>
*/
extern RTIEventDllExport RTIBool
RTIEventActiveDatabase_wakeup(struct RTIEventActiveDatabase *me);
/*e \ingroup RTIEventActiveDatabaseClass
\brief I wish I had polymorphism, but since this is C, use this to
invoke methods of the parent.
*/
extern RTIEventDllExport
struct REDADatabase *
RTIEventActiveDatabase_getParent(struct RTIEventActiveDatabase *me);
#ifdef __cplusplus
} /* extern "C" */
#endif
#include "event/event_activeDatabase_impl.h"
#endif /* event_activeDatabase_h */