Skip to content

Commit

Permalink
Support grpc scalar types like sint32, sint64,fixed32, fixed64, sfixe…
Browse files Browse the repository at this point in the history
…d32, sfixed64 (#142)
  • Loading branch information
ni-sujain authored Sep 15, 2022
1 parent 780061d commit 5adac80
Show file tree
Hide file tree
Showing 11 changed files with 1,154 additions and 120 deletions.
Binary file not shown.
Binary file not shown.
Binary file not shown.
552 changes: 444 additions & 108 deletions src/cluster_copier.cc

Large diffs are not rendered by default.

13 changes: 13 additions & 0 deletions src/cluster_copier.h
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,13 @@ namespace grpc_labview
static void CopyDoubleToCluster(const std::shared_ptr<MessageElementMetadata> metadata, int8_t* start, const std::shared_ptr<LVMessageValue>& value);
static void CopyFloatToCluster(const std::shared_ptr<MessageElementMetadata> metadata, int8_t* start, const std::shared_ptr<LVMessageValue>& value);
static void CopyAnyToCluster(const std::shared_ptr<MessageElementMetadata> metadata, int8_t* start, const std::shared_ptr<LVMessageValue>& value);
static void CopySInt32ToCluster(const std::shared_ptr<MessageElementMetadata> metadata, int8_t* start, const std::shared_ptr<LVMessageValue>& value);
static void CopySInt64ToCluster(const std::shared_ptr<MessageElementMetadata> metadata, int8_t* start, const std::shared_ptr<LVMessageValue>& value);
static void CopyFixed32ToCluster(const std::shared_ptr<MessageElementMetadata> metadata, int8_t* start, const std::shared_ptr<LVMessageValue>& value);
static void CopyFixed64ToCluster(const std::shared_ptr<MessageElementMetadata> metadata, int8_t* start, const std::shared_ptr<LVMessageValue>& value);
static void CopySFixed32ToCluster(const std::shared_ptr<MessageElementMetadata> metadata, int8_t* start, const std::shared_ptr<LVMessageValue>& value);
static void CopySFixed64ToCluster(const std::shared_ptr<MessageElementMetadata> metadata, int8_t* start, const std::shared_ptr<LVMessageValue>& value);


static void CopyStringFromCluster(const std::shared_ptr<MessageElementMetadata> metadata, int8_t* start, LVMessage& message);
static void CopyBytesFromCluster(const std::shared_ptr<MessageElementMetadata> metadata, int8_t* start, LVMessage& message);
Expand All @@ -50,5 +57,11 @@ namespace grpc_labview
static void CopyDoubleFromCluster(const std::shared_ptr<MessageElementMetadata> metadata, int8_t* start, LVMessage& message);
static void CopyFloatFromCluster(const std::shared_ptr<MessageElementMetadata> metadata, int8_t* start, LVMessage& message);
static void CopyAnyFromCluster(const std::shared_ptr<MessageElementMetadata> metadata, int8_t* start, LVMessage& message);
static void CopySInt32FromCluster(const std::shared_ptr<MessageElementMetadata> metadata, int8_t* start, LVMessage& message);
static void CopySInt64FromCluster(const std::shared_ptr<MessageElementMetadata> metadata, int8_t* start, LVMessage& message);
static void CopyFixed32FromCluster(const std::shared_ptr<MessageElementMetadata> metadata, int8_t* start, LVMessage& message);
static void CopyFixed64FromCluster(const std::shared_ptr<MessageElementMetadata> metadata, int8_t* start, LVMessage& message);
static void CopySFixed32FromCluster(const std::shared_ptr<MessageElementMetadata> metadata, int8_t* start, LVMessage& message);
static void CopySFixed64FromCluster(const std::shared_ptr<MessageElementMetadata> metadata, int8_t* start, LVMessage& message);
};
}
139 changes: 139 additions & 0 deletions src/lv_message.cc
Original file line number Diff line number Diff line change
Expand Up @@ -142,6 +142,24 @@ namespace grpc_labview
case LVMessageMetadataType::EnumValue:
ptr = ParseEnum(*fieldInfo, index, ptr, ctx);
break;
case LVMessageMetadataType::SInt32Value:
ptr = ParseSInt32(*fieldInfo, index, ptr, ctx);
break;
case LVMessageMetadataType::SInt64Value:
ptr = ParseSInt64(*fieldInfo, index, ptr, ctx);
break;
case LVMessageMetadataType::Fixed32Value:
ptr = ParseFixed32(*fieldInfo, index, ptr, ctx);
break;
case LVMessageMetadataType::Fixed64Value:
ptr = ParseFixed64(*fieldInfo, index, ptr, ctx);
break;
case LVMessageMetadataType::SFixed32Value:
ptr = ParseSFixed32(*fieldInfo, index, ptr, ctx);
break;
case LVMessageMetadataType::SFixed64Value:
ptr = ParseSFixed64(*fieldInfo, index, ptr, ctx);
break;
}
assert(ptr != nullptr);
}
Expand Down Expand Up @@ -375,6 +393,127 @@ namespace grpc_labview
}
}

//---------------------------------------------------------------------
//---------------------------------------------------------------------
const char* LVMessage::ParseSInt32(const MessageElementMetadata& fieldInfo, uint32_t index, const char* ptr, ParseContext* ctx)
{
if (fieldInfo.isRepeated)
{
auto v = std::make_shared<LVRepeatedSInt32MessageValue>(index);
ptr = PackedSInt32Parser(&(v->_value), ptr, ctx);
_values.emplace(index, v);
}
else
{
int32_t result;
ptr = ReadSINT32(ptr, &result);
auto v = std::make_shared<LVSInt32MessageValue>(index, result);
_values.emplace(index, v);
}
return ptr;
}

//---------------------------------------------------------------------
//---------------------------------------------------------------------
const char* LVMessage::ParseSInt64(const MessageElementMetadata& fieldInfo, uint32_t index, const char* ptr, ParseContext* ctx)
{
if (fieldInfo.isRepeated)
{
auto v = std::make_shared<LVRepeatedSInt64MessageValue>(index);
ptr = PackedSInt64Parser(&(v->_value), ptr, ctx);
_values.emplace(index, v);
}
else
{
int64_t result;
ptr = ReadSINT64(ptr, &result);
auto v = std::make_shared<LVSInt64MessageValue>(index, result);
_values.emplace(index, v);
}
return ptr;
}

//---------------------------------------------------------------------
//---------------------------------------------------------------------
const char* LVMessage::ParseFixed32(const MessageElementMetadata& fieldInfo, uint32_t index, const char* ptr, ParseContext* ctx)
{
if (fieldInfo.isRepeated)
{
auto v = std::make_shared<LVRepeatedFixed32MessageValue>(index);
ptr = PackedFixed32Parser(&(v->_value), ptr, ctx);
_values.emplace(index, v);
}
else
{
uint32_t result;
ptr = ReadFIXED32(ptr, &result);
auto v = std::make_shared<LVFixed32MessageValue>(index, result);
_values.emplace(index, v);
}
return ptr;
}


//---------------------------------------------------------------------
//---------------------------------------------------------------------
const char* LVMessage::ParseFixed64(const MessageElementMetadata& fieldInfo, uint32_t index, const char* ptr, ParseContext* ctx)
{
if (fieldInfo.isRepeated)
{
auto v = std::make_shared<LVRepeatedFixed64MessageValue>(index);
ptr = PackedFixed64Parser(&(v->_value), ptr, ctx);
_values.emplace(index, v);
}
else
{
uint64_t result;
ptr = ReadFIXED64(ptr, &result);
auto v = std::make_shared<LVFixed64MessageValue>(index, result);
_values.emplace(index, v);
}
return ptr;
}

//---------------------------------------------------------------------
//---------------------------------------------------------------------
const char* LVMessage::ParseSFixed32(const MessageElementMetadata& fieldInfo, uint32_t index, const char* ptr, ParseContext* ctx)
{
if (fieldInfo.isRepeated)
{
auto v = std::make_shared<LVRepeatedFixed32MessageValue>(index);
ptr = PackedSFixed32Parser(&(v->_value), ptr, ctx);
_values.emplace(index, v);
}
else
{
int32_t result;
ptr = ReadSFIXED32(ptr, &result);
auto v = std::make_shared<LVSFixed32MessageValue>(index, result);
_values.emplace(index, v);
}
return ptr;
}

//---------------------------------------------------------------------
//---------------------------------------------------------------------
const char* LVMessage::ParseSFixed64(const MessageElementMetadata& fieldInfo, uint32_t index, const char* ptr, ParseContext* ctx)
{
if (fieldInfo.isRepeated)
{
auto v = std::make_shared<LVRepeatedSFixed64MessageValue>(index);
ptr = PackedSFixed64Parser(&(v->_value), ptr, ctx);
_values.emplace(index, v);
}
else
{
int64_t result;
ptr = ReadSFIXED64(ptr, &result);
auto v = std::make_shared<LVSFixed64MessageValue>(index, result);
_values.emplace(index, v);
}
return ptr;
}

//---------------------------------------------------------------------
//---------------------------------------------------------------------
const char *LVMessage::ParseNestedMessage(google::protobuf::uint32 tag, const MessageElementMetadata& fieldInfo, uint32_t index, const char *ptr, ParseContext *ctx)
Expand Down
6 changes: 6 additions & 0 deletions src/lv_message.h
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,12 @@ namespace grpc_labview
const char *ParseUInt64(const MessageElementMetadata& fieldInfo, uint32_t index, const char *ptr, google::protobuf::internal::ParseContext *ctx);
const char *ParseFloat(const MessageElementMetadata& fieldInfo, uint32_t index, const char *ptr, google::protobuf::internal::ParseContext *ctx);
const char *ParseDouble(const MessageElementMetadata& fieldInfo, uint32_t index, const char *ptr, google::protobuf::internal::ParseContext *ctx);
const char* ParseSInt32(const MessageElementMetadata& fieldInfo, uint32_t index, const char* ptr, google::protobuf::internal::ParseContext* ctx);
const char* ParseSInt64(const MessageElementMetadata& fieldInfo, uint32_t index, const char* ptr, google::protobuf::internal::ParseContext* ctx);
const char* ParseFixed32(const MessageElementMetadata& fieldInfo, uint32_t index, const char* ptr, google::protobuf::internal::ParseContext* ctx);
const char* ParseFixed64(const MessageElementMetadata& fieldInfo, uint32_t index, const char* ptr, google::protobuf::internal::ParseContext* ctx);
const char* ParseSFixed32(const MessageElementMetadata& fieldInfo, uint32_t index, const char* ptr, google::protobuf::internal::ParseContext* ctx);
const char* ParseSFixed64(const MessageElementMetadata& fieldInfo, uint32_t index, const char* ptr, google::protobuf::internal::ParseContext* ctx);
const char *ParseString(unsigned int tag, const MessageElementMetadata& fieldInfo, uint32_t index, const char *ptr, google::protobuf::internal::ParseContext *ctx);
const char *ParseBytes(unsigned int tag, const MessageElementMetadata& fieldInfo, uint32_t index, const char *ptr, google::protobuf::internal::ParseContext *ctx);
const char *ParseNestedMessage(google::protobuf::uint32 tag, const MessageElementMetadata& fieldInfo, uint32_t index, const char *ptr, google::protobuf::internal::ParseContext *ctx);
Expand Down
Loading

0 comments on commit 5adac80

Please sign in to comment.