79 lines
2.2 KiB
C
79 lines
2.2 KiB
C
/*
|
|
* Copyright(c) 2006 to 2021 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 DDSI_SERDATA_PSEROP_H
|
|
#define DDSI_SERDATA_PSEROP_H
|
|
|
|
#include "dds/ddsi/ddsi_serdata.h"
|
|
#include "dds/ddsi/ddsi_sertype.h"
|
|
#include "dds/ddsi/ddsi_plist_generic.h"
|
|
|
|
#include "dds/dds.h"
|
|
|
|
#if defined (__cplusplus)
|
|
extern "C" {
|
|
#endif
|
|
|
|
/* There is an alignment requirement on the raw data (it must be at
|
|
offset mod 8 for the conversion to/from a dds_stream to work).
|
|
So we define two types: one without any additional padding, and
|
|
one where the appropriate amount of padding is inserted */
|
|
#define DDSI_SERDATA_PSEROP_PREPAD \
|
|
struct ddsi_serdata c; \
|
|
void *sample; \
|
|
bool keyless; /*cached from topic*/ \
|
|
uint32_t pos; \
|
|
uint32_t size
|
|
#define DDSI_SERDATA_PSEROP_POSTPAD \
|
|
uint16_t identifier; \
|
|
uint16_t options; \
|
|
char data[]
|
|
|
|
struct ddsi_serdata_pserop_unpadded {
|
|
DDSI_SERDATA_PSEROP_PREPAD;
|
|
DDSI_SERDATA_PSEROP_POSTPAD;
|
|
};
|
|
|
|
#ifdef __GNUC__
|
|
#define DDSI_SERDATA_PSEROP_PAD(n) ((n) % 8)
|
|
#else
|
|
#define DDSI_SERDATA_PSEROP_PAD(n) (n)
|
|
#endif
|
|
|
|
struct ddsi_serdata_pserop {
|
|
DDSI_SERDATA_PSEROP_PREPAD;
|
|
char pad[DDSI_SERDATA_PSEROP_PAD (8 - (offsetof (struct ddsi_serdata_pserop_unpadded, data) % 8))];
|
|
DDSI_SERDATA_PSEROP_POSTPAD;
|
|
};
|
|
|
|
#undef DDSI_SERDATA_PSEROP_PAD
|
|
#undef DDSI_SERDATA_PSEROP_POSTPAD
|
|
#undef DDSI_SERDATA_PSEROP_PREPAD
|
|
|
|
struct ddsi_sertype_pserop {
|
|
struct ddsi_sertype c;
|
|
uint16_t encoding_format; /* CDR_ENC_FORMAT_(PLAIN|DELIMITED|PL) */
|
|
size_t memsize;
|
|
size_t nops;
|
|
const enum pserop *ops;
|
|
size_t nops_key;
|
|
const enum pserop *ops_key; /* NULL <=> no key; != NULL <=> 16-byte key at offset 0 */
|
|
};
|
|
|
|
extern DDS_EXPORT const struct ddsi_sertype_ops ddsi_sertype_ops_pserop;
|
|
extern DDS_EXPORT const struct ddsi_serdata_ops ddsi_serdata_ops_pserop;
|
|
|
|
#if defined (__cplusplus)
|
|
}
|
|
#endif
|
|
|
|
#endif
|