Go2Py/cpp_bridge/thirdparty/include/dds/ddsi/q_addrset.h

98 lines
4.4 KiB
C++

/*
* Copyright(c) 2006 to 2022 ZettaScale Technology and others
*
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License v. 2.0 which is available at
* http://www.eclipse.org/legal/epl-2.0, or the Eclipse Distribution License
* v. 1.0 which is available at
* http://www.eclipse.org/org/documents/edl-v10.php.
*
* SPDX-License-Identifier: EPL-2.0 OR BSD-3-Clause
*/
#ifndef NN_ADDRSET_H
#define NN_ADDRSET_H
#include "dds/ddsrt/sync.h"
#include "dds/ddsrt/avl.h"
#include "dds/ddsi/q_log.h"
#include "dds/ddsi/q_thread.h"
#include "dds/ddsi/q_protocol.h"
#include "dds/ddsi/q_feature_check.h"
#if defined (__cplusplus)
extern "C" {
#endif
typedef struct addrset_node {
ddsrt_avl_node_t avlnode;
ddsi_xlocator_t loc;
} * addrset_node_t;
struct addrset {
ddsrt_mutex_t lock;
ddsrt_atomic_uint32_t refc;
ddsrt_avl_ctree_t ucaddrs, mcaddrs;
};
typedef void (*addrset_forall_fun_t) (const ddsi_xlocator_t *loc, void *arg);
typedef ssize_t (*addrset_forone_fun_t) (const ddsi_xlocator_t *loc, void *arg);
DDS_EXPORT struct addrset *new_addrset (void);
DDS_EXPORT struct addrset *ref_addrset (struct addrset *as);
DDS_EXPORT void unref_addrset (struct addrset *as);
DDS_EXPORT void add_locator_to_addrset (const struct ddsi_domaingv *gv, struct addrset *as, const ddsi_locator_t *loc);
DDS_EXPORT void add_xlocator_to_addrset (const struct ddsi_domaingv *gv, struct addrset *as, const ddsi_xlocator_t *loc);
DDS_EXPORT void remove_from_addrset (const struct ddsi_domaingv *gv, struct addrset *as, const ddsi_xlocator_t *loc);
DDS_EXPORT int addrset_purge (struct addrset *as);
int compare_locators (const ddsi_locator_t *a, const ddsi_locator_t *b);
int compare_xlocators (const ddsi_xlocator_t *a, const ddsi_xlocator_t *b);
/* These lock ASADD, then lock/unlock AS any number of times, then
unlock ASADD */
void copy_addrset_into_addrset_uc (const struct ddsi_domaingv *gv, struct addrset *as, const struct addrset *asadd);
void copy_addrset_into_addrset_mc (const struct ddsi_domaingv *gv, struct addrset *as, const struct addrset *asadd);
void copy_addrset_into_addrset (const struct ddsi_domaingv *gv, struct addrset *as, const struct addrset *asadd);
size_t addrset_count (const struct addrset *as);
size_t addrset_count_uc (const struct addrset *as);
size_t addrset_count_mc (const struct addrset *as);
int addrset_empty_uc (const struct addrset *as);
int addrset_empty_mc (const struct addrset *as);
int addrset_empty (const struct addrset *as);
int addrset_any_uc (const struct addrset *as, ddsi_xlocator_t *dst);
int addrset_any_mc (const struct addrset *as, ddsi_xlocator_t *dst);
void addrset_any_uc_else_mc_nofail (const struct addrset *as, ddsi_xlocator_t *dst);
/* Keeps AS locked */
int addrset_forone (struct addrset *as, addrset_forone_fun_t f, void *arg);
DDS_EXPORT void addrset_forall (struct addrset *as, addrset_forall_fun_t f, void *arg);
size_t addrset_forall_count (struct addrset *as, addrset_forall_fun_t f, void *arg);
size_t addrset_forall_uc_else_mc_count (struct addrset *as, addrset_forall_fun_t f, void *arg);
size_t addrset_forall_mc_count (struct addrset *as, addrset_forall_fun_t f, void *arg);
void nn_log_addrset (struct ddsi_domaingv *gv, uint32_t tf, const char *prefix, const struct addrset *as);
/* Tries to lock A then B for a decent check, returning false if
trylock B fails */
int addrset_eq_onesidederr (const struct addrset *a, const struct addrset *b);
int is_unspec_locator (const ddsi_locator_t *loc);
int is_unspec_xlocator (const ddsi_xlocator_t *loc);
void set_unspec_locator (ddsi_locator_t *loc);
void set_unspec_xlocator (ddsi_xlocator_t *loc);
struct ddsi_domaingv;
int add_addresses_to_addrset (const struct ddsi_domaingv *gv, struct addrset *as, const char *addrs, int port_mode, const char *msgtag, int req_mc);
#ifdef DDS_HAS_SSM
int addrset_contains_ssm (const struct ddsi_domaingv *gv, const struct addrset *as);
int addrset_any_ssm (const struct ddsi_domaingv *gv, const struct addrset *as, ddsi_xlocator_t *dst);
int addrset_any_non_ssm_mc (const struct ddsi_domaingv *gv, const struct addrset *as, ddsi_xlocator_t *dst);
void copy_addrset_into_addrset_no_ssm_mc (const struct ddsi_domaingv *gv, struct addrset *as, const struct addrset *asadd);
void copy_addrset_into_addrset_no_ssm (const struct ddsi_domaingv *gv, struct addrset *as, const struct addrset *asadd);
#endif
#if defined (__cplusplus)
}
#endif
#endif /* NN_ADDRSET_H */