int ECMarshallingMessage::deserialize(common::Stream& input) { int32_t ret = input.get_int64(&family_id_); if (common::TFS_SUCCESS == ret) { ret = input.get_int64(&seqno_); } if (common::TFS_SUCCESS == ret) { ret = input.get_int32(&expire_time_); } if (common::TFS_SUCCESS == ret) { ret = input.get_int32(&family_aid_info_); } if (common::TFS_SUCCESS == ret) { const int32_t MEMBER_NUM = GET_DATA_MEMBER_NUM(family_aid_info_) + GET_CHECK_MEMBER_NUM(family_aid_info_); ret = (MEMBER_NUM > 0 && MEMBER_NUM <= MAX_MARSHALLING_NUM) ? common::TFS_SUCCESS : common::EXIT_PARAMETER_ERROR; if (TFS_SUCCESS == ret) { family_members_ = new (std::nothrow)FamilyMemberInfo[MEMBER_NUM]; assert(family_members_); for (int32_t index = 0; index < MEMBER_NUM && TFS_SUCCESS == ret; ++index) { int64_t pos = 0; ret = family_members_[index].deserialize(input.get_data(), input.get_data_length() , pos); if (TFS_SUCCESS == ret) input.drain(family_members_[index].length()); } } } return ret; }
int ECMarshallingMessage::serialize(common::Stream& output) const { const int32_t MEMBER_NUM = GET_DATA_MEMBER_NUM(family_aid_info_) + GET_CHECK_MEMBER_NUM(family_aid_info_); int32_t ret = output.set_int64(family_id_); if (common::TFS_SUCCESS == ret) { ret = output.set_int64(seqno_); } if (common::TFS_SUCCESS == ret) { ret = output.set_int32(expire_time_); } if (common::TFS_SUCCESS == ret) { ret = (NULL != family_members_ && MEMBER_NUM > 0 && MEMBER_NUM <= MAX_MARSHALLING_NUM) ? common::TFS_SUCCESS : common::EXIT_PARAMETER_ERROR; if (TFS_SUCCESS == ret) { ret = output.set_int32(family_aid_info_); } } if (common::TFS_SUCCESS == ret) { for (int32_t index = 0; index < MEMBER_NUM && TFS_SUCCESS == ret; ++index) { int64_t pos = 0; ret = family_members_[index].serialize(output.get_free(), output.get_free_length() , pos); if (TFS_SUCCESS == ret) output.pour(family_members_[index].length()); } } return ret; }
int64_t ECMarshallingMessage::length() const { int64_t len = 0; const int32_t MEMBER_NUM = GET_DATA_MEMBER_NUM(family_aid_info_) + GET_CHECK_MEMBER_NUM(family_aid_info_); for (int32_t index = 0; index < MEMBER_NUM; ++index) { len += family_members_[index].length(); } return len + INT64_SIZE * 2 + INT_SIZE * 2; }
int ECMarshallingMessage::set_family_member_info(const FamilyMemberInfo* members, const int32_t family_aid_info) { const int32_t MEMBER_NUM = GET_DATA_MEMBER_NUM(family_aid_info) + GET_CHECK_MEMBER_NUM(family_aid_info); int32_t ret = (NULL != members && MEMBER_NUM > 0 && MEMBER_NUM <= MAX_MARSHALLING_NUM * 2) ? common::TFS_SUCCESS : common::EXIT_PARAMETER_ERROR; if (TFS_SUCCESS == ret) { family_aid_info_ = family_aid_info; family_members_ = new (std::nothrow)FamilyMemberInfo[MEMBER_NUM]; assert(family_members_); memcpy(family_members_, members, MEMBER_NUM * sizeof(FamilyMemberInfo)); } return ret; }
int GetFamilyInfoResponseMessage::serialize(common::Stream& output) const { int32_t ret = output.set_int64(family_id_); if (common::TFS_SUCCESS == ret) { ret = output.set_int32(family_aid_info_); } if (common::TFS_SUCCESS == ret) { const int32_t MEMBER_NUM = GET_DATA_MEMBER_NUM(family_aid_info_) + GET_CHECK_MEMBER_NUM(family_aid_info_); for (int32_t index = 0; index < MEMBER_NUM; ++index) { ret = output.set_int64(members_[index].first); if (common::TFS_SUCCESS == ret) ret = output.set_int64(members_[index].second); } } return ret; }
int GetFamilyInfoResponseMessage::deserialize(common::Stream& input) { int32_t ret = input.get_int64(&family_id_); if (common::TFS_SUCCESS == ret) { ret = input.get_int32(&family_aid_info_); } if (common::TFS_SUCCESS == ret) { int32_t index = 0; const int32_t MEMBER_NUM = GET_DATA_MEMBER_NUM(family_aid_info_) + GET_CHECK_MEMBER_NUM(family_aid_info_); for (index = 0; index < MEMBER_NUM && common::TFS_SUCCESS == ret; ++index) { std::pair<uint64_t, uint64_t>* item = &members_[index]; ret = input.get_int64(reinterpret_cast<int64_t*>(&item->first)); if (common::TFS_SUCCESS == ret) ret = input.get_int64(reinterpret_cast<int64_t*>(&item->second)); } if (common::TFS_SUCCESS == ret) ret = index == MEMBER_NUM ? common::TFS_SUCCESS : common::EXIT_DESERIALIZE_ERROR; } return ret; }
int64_t GetFamilyInfoResponseMessage::length() const { const uint32_t MEMBER_NUM = GET_DATA_MEMBER_NUM(family_aid_info_) + GET_CHECK_MEMBER_NUM(family_aid_info_); return common::INT64_SIZE + common::INT_SIZE + MEMBER_NUM * (common::INT64_SIZE + common::INT64_SIZE); }