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

78 lines
2.8 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_MISC_H
#define NN_MISC_H
#include "dds/ddsi/q_protocol.h"
#if defined (__cplusplus)
extern "C" {
#endif
DDS_INLINE_EXPORT inline seqno_t fromSN (const nn_sequence_number_t sn) {
uint64_t sn_high = (uint32_t) sn.high;
return (sn_high << 32) | sn.low;
}
DDS_INLINE_EXPORT inline bool validating_fromSN (const nn_sequence_number_t sn, seqno_t *res) {
// fromSN does not checks whatsoever (and shouldn't because it is used quite a lot)
// Valid sequence numbers are in [1 .. 2**63-1] union { SEQUENCE_NUMBER_UNKNOWN }
// where SEQUENCE_NUMBER_UNKNOWN is the usual abomination: ((2**32-1) << 32)
//
// As far as I can tell, there are no messages where SEQUENCE_NUMBER_UNKNOWN is actually a
// valid input (it would perhaps have been an elegant way to mark pre-emptive HEARTBEATs and
// ACKNACKs, but convention is different). So we reject them as invalid until we are forced
// to do differently. That leaves [1 .. 2**63-1]
//
// Since we use uint64_t, we can easily test by checking whether (s-1) is in [0 .. 2**63-1)
const seqno_t tmp = fromSN (sn);
*res = tmp;
return (tmp - 1) < MAX_SEQ_NUMBER;
}
DDS_INLINE_EXPORT inline nn_sequence_number_t toSN (seqno_t n) {
nn_sequence_number_t x;
x.high = (int32_t) (n >> 32);
x.low = (uint32_t) n;
return x;
}
unsigned char normalize_data_datafrag_flags (const SubmessageHeader_t *smhdr);
#ifdef DDS_HAS_NETWORK_PARTITIONS
int WildcardOverlap(char * p1, char * p2);
#endif
extern const ddsi_guid_t nullguid;
DDS_EXPORT bool guid_prefix_zero (const ddsi_guid_prefix_t *a);
DDS_EXPORT int guid_prefix_eq (const ddsi_guid_prefix_t *a, const ddsi_guid_prefix_t *b);
DDS_EXPORT int guid_eq (const struct ddsi_guid *a, const struct ddsi_guid *b);
DDS_EXPORT int ddsi2_patmatch (const char *pat, const char *str);
#ifdef DDS_HAS_NETWORK_PARTITIONS
struct ddsi_config;
struct ddsi_config_partitionmapping_listelem;
struct ddsi_config_partitionmapping_listelem *find_partitionmapping (const struct ddsi_config *cfg, const char *partition, const char *topic);
int is_ignored_partition (const struct ddsi_config *cfg, const char *partition, const char *topic);
#endif
#ifdef DDS_HAS_NETWORK_CHANNELS
struct ddsi_config;
struct ddsi_config_channel_listelem;
struct ddsi_config_channel_listelem *find_channel (const struct config *cfg, nn_transport_priority_qospolicy_t transport_priority);
#endif
#if defined (__cplusplus)
}
#endif
#endif /* NN_MISC_H */