ImqCache C++ 类

使用此类来保存或编组内存中的数据。

图 1。 ImqCache 类
显示 ImqCache 类及其父类 ImqError的 Booch 类图。

使用此类来保存或编组内存中的数据。 您可以指定固定大小的内存缓冲区,或者系统可以自动提供灵活的内存量。 此类与 ImqCache 交叉引用中列出的 MQI 调用相关。

对象属性

自动缓冲区
指示缓冲区内存是由系统自动管理 (TRUE) 还是由用户提供 (FALSE)。 它最初设置为 TRUE。

未直接设置此属性。 它通过间接方式使用 useEmptyBufferuseFullBuffer 方法。

如果提供了用户存储器,那么此属性为 FALSE ,缓冲区内存无法增长,并且可能会发生缓冲区溢出错误。 缓冲区的地址和长度保持不变。

如果未提供用户存储器,那么此属性为 TRUE ,并且缓冲区内存可以递增增长以容纳任意数量的消息数据。 但是,当缓冲区增大时,缓冲区的地址可能会更改,因此使用 缓冲区指针数据指针时请小心。

缓冲区长度
缓冲区中的内存字节数。 初始值为零。
缓冲区指针
缓冲区内存的地址。 初始值为空。
数据长度
数据指针之后的字节数。 这必须等于或小于 消息长度。 初始值为零。
数据偏移量
数据指针之前的字节数。 这必须等于或小于 消息长度。 初始值为零。
数据指针
要写入或从下一个缓冲区中读取的部分的地址。 初始值为空。
消息长度
缓冲区中重要数据的字节数。 初始值为零。

构造函数

ImqCache( );
缺省构造函数。
ImqCache( const & ImqCache cache );
复制构造函数。

对象方法 (公用)

void 运算符 = ( const ImqCache & 高速缓存 );
将最多 message length 字节的数据从 cache 对象复制到该对象。 如果 自动缓冲区 为 FALSE ,那么 缓冲区长度 必须已足以容纳复制的数据。
ImqBoolean automaticBuffer () const ;
返回 自动缓冲区 值。
size_t bufferLength () const ;
返回 缓冲区长度
char * bufferPointer () const ;
返回 缓冲区指针
void clearMessage ();
消息长度数据偏移量 设置为零。
size_t dataLength () const ;
返回 数据长度
size_t dataOffset () const ;
返回 数据偏移量
ImqBoolean ( const size_t offset ); setDataOffset ( const size_ t offset );
设置 数据偏移量。 如果需要,将增大 消息长度 ,以确保其不小于 数据偏移量。 如果成功,此方法将返回 TRUE。
char * dataPointer () const ;
返回 数据指针的副本。
size_t messageLength () const ;
返回 消息长度
ImqBoolean ( const size_t length ); setMessageLength ( const size_ t length );
设置 消息长度。 如果需要,请增大 缓冲区长度 ,以确保 消息长度 不大于 缓冲区长度。 必要时减小 数据偏移量 ,以确保其不大于 消息长度。 如果成功,将返回 TRUE。
ImqBoolean moreBytes ( const size_t bytes-required );
确保在 数据指针 与缓冲区末尾之间提供 bytes-required 更多字节 (用于写入)。 如果成功,将返回 TRUE。

如果 自动缓冲区 为 TRUE ,那么将根据需要获取更多内存; 否则, 缓冲区长度 必须已足够。

ImqBoolean ( 连接大小 (t) 长度, char * & 外部缓冲区 );
length 字节从缓冲区从 数据指针 位置开始复制到 external-buffer。 复制数据后, 数据偏移量 将增大 length。 如果成功,此方法将返回 TRUE。
ImqBoolean resizeBuffer ( const size_t length );
更改 缓冲区长度,前提是 自动缓冲区 为 TRUE。 这是通过重新分配缓冲区内存来实现的。 将现有缓冲区中最多 消息长度 字节的数据复制到新缓冲区。 复制的最大数目为 length 字节。 缓冲区指针 已更改。 消息长度数据偏移量 将尽可能在新缓冲区的范围内保留。 如果成功,那么返回 TRUE ,如果 自动缓冲区 为 FALSE ,那么返回 FALSE。
注: 如果系统资源存在任何问题,那么此方法可能会失败,并返回 MQRC_STORAGE_NOT_AVAILABLE。
ImqBoolean ( const char * external-buffer, const size_t length ); useEmptyBuffer ( const char * external-buffer, const size_t length );
标识空的用户缓冲区,将 缓冲区指针 设置为指向 external-buffer,将 缓冲区长度 设置为 length,将 message length 设置为零。 执行 clearMessage。 如果缓冲区已完全填充数据,请改用 useFullBuffer 方法。 如果缓冲区已部分填充数据,请使用 setMessageLength 方法来指示正确的数量。 如果成功,此方法将返回 TRUE。

此方法可用于标识固定内存量,如前所述 ( external-buffer 不为空且 length 为非零) ,在此情况下, automatic buffer 设置为 FALSE ,或者可用于还原为系统管理的灵活内存 ( external-buffer 为空且 length 为零) ,在此情况下, automatic buffer 设置为 TRUE。

ImqBoolean ( const char * externalBuffer, const size_t length ); useFullBuffer ( const char * externalBuffer, const size_t length );
至于使用EmptyBuffer ,只是将消息长度设置为 length。 如果成功,将返回 TRUE。
ImqBoolean write ( const size_t lengthconst char * external-buffer );
length 个字节从 external-buffer复制到缓冲区中,从 数据指针 位置开始。 复制数据后, data offset 将增大 length,如果需要,将增大 message length ,以确保它不小于新的 data offset 值。 如果成功,此方法将返回 TRUE。

如果 自动缓冲区 为 TRUE ,那么保证足够的内存量; 否则,最终 数据偏移量 不得超过 缓冲区长度

原因码

  • MQRC_BUFFER_NOT_AUTOMATIC
  • MQRC_DATA_截断
  • MQRC_IN区内的缓冲区
  • MQRC_IN有数据
  • MQRC_NULL_POINTER
  • MQRC_STORAGE_NOT_AVAILABLE
  • MQRC_ZERO_LENGTH