# DataReader

DataReader(数据写者)用于对某个主题实例进行接收。DataReader 的主要接口如下表所示,注意为了实现不同数据类型的主题发送,DataReader 需要被实例化为不同的子类对象(统称为 FooDataReader),下表中列出的接口包括了 FooDataReader 的接口。本文只对常用接口进行详细说明,其他可参考 DDS 规范。

表 1 DataReader 接口
接口函数 接口功能
read 读取数据
read_next_sample 读取下一个数据
take 获取数据
take_next_sample 获取下一个数据

# Read

1) 函数原型

ReturnCode_t read(FooSeq& data_values,
		SampleInfoSeq& sample_infos,
		int max_samples,
		SampleStateKind sample_states,
		ViewStateKind view_states,
		InstanceStateKind instance_states);

1
2
3
4
5
6
7

2) 功能简介

读取数据,返回 DataReader 的接收队列中现有的数据样本集合和样本信息集合,上述数据不会从接收队列中删除。注意原型中参数 data_values 对于不同主题有不同的数据类型,本处统称为 FooSeq。

3) 输入参数

int max_samples [in]:最大样本数,指定一次读取操作返回的最大样本数。

SampleStateKind sample_states [in]:样本状态掩码,其中样本状态可选取值为 READ 或 NOT_READ,表示该样本是否已经被读取过。可使用默认值 0。

ViewStateKind view_states [in]:访问状态掩码,其中访问状态可选值为 NEW 或 NOT_NEW,表示该实例的样本是否已经被访问过。可使用默认值 0。

InstanceStateKind instance_states [in]:实例状态掩码,其中实例状态可选值为 ALIVE、NOT_ALIVE_DISPOSED 或 NOT_ALIVE_NO_WRITERS,表示该实例是否存活且被处理过。可使用默认值 0。可使用默认值 0。

4) 输出参数

FooSeq& data_values [out]:数据样本集合,即应用软件订阅端接收到的某个主题的数据。

SampleInfoSeq& sample_infos [out]:样本信息结构集合,即应用软件订阅端接收到的主题数据对应的样本信息。

5) 返回值

若成功执行则返回创建 0(RETCODE_OK),否则返回错误码。

1) 函数原型

ReturnCode_t read_next_sample(Foo& receivedData,
		SampleInfo& sample_info);

1
2
3

2) 功能简介

读取下一个数据,返回 DataReader 的接收队列中未被读取的下一个数据样本和样本信息,上述数据不会从接收队列中删除。注意原型中参数 receivedData 对于不同主题有不同的数据类型,本处统称为 Foo。

3) 输入参数

无。

4) 输出参数

Foo& receivedData [out]:数据样本,即应用软件订阅端接收到的某个主题的数据。

SampleInfo& sample_info [out]:样本信息结构,即应用软件订阅端接收到的主题数据对应的样本信息。

5) 返回值

若成功执行则返回创建 0(RETCODE_OK),否则返回错误码。

# Take

1) 函数原型

ReturnCode_t take(FooSeq& data_values,
		SampleInfoSeq& sample_infos,
		int max_samples,
		SampleStateKind sample_states,
		ViewStateKind view_states,
		InstanceStateKind instance_states);

1
2
3
4
5
6
7

2) 功能简介

获取数据,返回 DataReader 的接收队列中现有的数据样本集合和样本信息集合,并从接收队列中删除上述数据。注意原型中参数 data_values 对于不同主题有不同的数据类型,本处统称为 FooSeq。

3) 输入参数

int max_samples [in]:最大样本数,指定一次读取操作返回的最大样本数。

SampleStateKind sample_states [in]:样本状态掩码,其中样本状态可选取值为 READ 或 NOT_READ,表示该样本是否已经被读取过。可使用默认值 0。

ViewStateKind view_states [in]:访问状态掩码,其中访问状态可选值为 NEW 或 NOT_NEW,表示该实例的样本是否已经被访问过。可使用默认值 0。

InstanceStateKind instance_states [in]:实例状态掩码,其中实例状态可选值为 ALIVE、NOT_ALIVE_DISPOSED 或 NOT_ALIVE_NO_WRITERS,表示该实例是否存活且被处理过。可使用默认值 0。可使用默认值 0。

4) 输出参数

FooSeq& data_values [out]:数据样本集合,即应用软件订阅端接收到的某个主题的数据。

SampleInfoSeq& sample_infos [out]:样本信息结构集合,即应用软件订阅端接收到的主题数据对应的样本信息。

5) 返回值

若成功执行则返回创建 0(RETCODE_OK),否则返回错误码。

# Take_next_sample

1) 函数原型

ReturnCode_t take_next_sample(Foo& receivedData,
		SampleInfo& sample_info);

1
2
3

2) 功能简介

获取下一个数据,返回 DataReader 的接收队列中未被读取的下一个数据样本和样本信息从接收队列中删除上述数据。注意原型中参数 receivedData 对于不同主题有不同的数据类型,本处统称为 Foo。

3) 输入参数

无。

4) 输出参数

Foo& receivedData [out]:数据样本,即应用软件订阅端接收到的某个主题的数据。

SampleInfo& sample_info [out]:样本信息结构,即应用软件订阅端接收到的主题数据对应的样本信息。

5) 返回值

若成功执行则返回创建 0(RETCODE_OK),否则返回错误码。