From fe826edcce05d633ec415a55da8dd9b9514b591a Mon Sep 17 00:00:00 2001 From: Baodi Shi Date: Tue, 20 Jun 2023 00:05:09 +0800 Subject: [PATCH 1/3] feat: Support message copy for C client. --- include/pulsar/c/message.h | 9 ++++++++ lib/c/c_Message.cc | 5 +++++ tests/c/c_MessageTest.cc | 43 ++++++++++++++++++++++++++++++++++++++ 3 files changed, 57 insertions(+) create mode 100644 tests/c/c_MessageTest.cc diff --git a/include/pulsar/c/message.h b/include/pulsar/c/message.h index 353e609f..b04d976c 100644 --- a/include/pulsar/c/message.h +++ b/include/pulsar/c/message.h @@ -33,6 +33,15 @@ typedef struct _pulsar_message pulsar_message_t; typedef struct _pulsar_message_id pulsar_message_id_t; PULSAR_PUBLIC pulsar_message_t *pulsar_message_create(); +/** + * Copy the contents of one pulsar_message_t object to another. + * + * Note: This method is a shallow copy, which will copy the pulsar::Message. + * + * @param from A pointer to the pulsar_message_t object that you want to copy from + * @param to A pointer to the pulsar_message_t object that you want to copy to + */ +PULSAR_PUBLIC void pulsar_message_copy(pulsar_message_t *from, pulsar_message_t *to); PULSAR_PUBLIC void pulsar_message_free(pulsar_message_t *message); /// Builder diff --git a/lib/c/c_Message.cc b/lib/c/c_Message.cc index 826ebc17..0ef79085 100644 --- a/lib/c/c_Message.cc +++ b/lib/c/c_Message.cc @@ -23,6 +23,11 @@ pulsar_message_t *pulsar_message_create() { return new pulsar_message_t; } +void pulsar_message_copy(pulsar_message_t *from, pulsar_message_t *to) { + to->builder = from->builder; + to->message = from->message; +} + void pulsar_message_free(pulsar_message_t *message) { delete message; } void pulsar_message_set_content(pulsar_message_t *message, const void *data, size_t size) { diff --git a/tests/c/c_MessageTest.cc b/tests/c/c_MessageTest.cc new file mode 100644 index 00000000..7a70ba33 --- /dev/null +++ b/tests/c/c_MessageTest.cc @@ -0,0 +1,43 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +#include +#include +#include +#include + +struct _pulsar_message { + pulsar::MessageBuilder builder; + pulsar::Message message; +}; + +TEST(c_MessageTest, MessageCopy) { + pulsar_message_t *from = pulsar_message_create(); + pulsar_message_set_content(from, "hello", 5); + from->message = from->builder.build(); + std::cout << "from: " << (const char *)pulsar_message_get_data(from) << std::endl; + + pulsar_message_t *to = pulsar_message_create(); + pulsar_message_copy(from, to); + pulsar_message_free(from); + + std::cout << "to: " << (const char *)pulsar_message_get_data(to) << std::endl; + ASSERT_STREQ((const char *)pulsar_message_get_data(to), "hello"); + + pulsar_message_free(to); +} From be88b0572413c2df91f51c31a38234be35052ec4 Mon Sep 17 00:00:00 2001 From: Baodi Shi Date: Tue, 20 Jun 2023 22:20:50 +0800 Subject: [PATCH 2/3] Fix code review. --- include/pulsar/c/message.h | 2 +- lib/c/c_Message.cc | 2 +- tests/c/c_MessageTest.cc | 9 +++------ 3 files changed, 5 insertions(+), 8 deletions(-) diff --git a/include/pulsar/c/message.h b/include/pulsar/c/message.h index b04d976c..30f1bad0 100644 --- a/include/pulsar/c/message.h +++ b/include/pulsar/c/message.h @@ -41,7 +41,7 @@ PULSAR_PUBLIC pulsar_message_t *pulsar_message_create(); * @param from A pointer to the pulsar_message_t object that you want to copy from * @param to A pointer to the pulsar_message_t object that you want to copy to */ -PULSAR_PUBLIC void pulsar_message_copy(pulsar_message_t *from, pulsar_message_t *to); +PULSAR_PUBLIC void pulsar_message_copy(const pulsar_message_t *from, pulsar_message_t *to); PULSAR_PUBLIC void pulsar_message_free(pulsar_message_t *message); /// Builder diff --git a/lib/c/c_Message.cc b/lib/c/c_Message.cc index 0ef79085..3d300957 100644 --- a/lib/c/c_Message.cc +++ b/lib/c/c_Message.cc @@ -23,7 +23,7 @@ pulsar_message_t *pulsar_message_create() { return new pulsar_message_t; } -void pulsar_message_copy(pulsar_message_t *from, pulsar_message_t *to) { +void pulsar_message_copy(const pulsar_message_t *from, pulsar_message_t *to) { to->builder = from->builder; to->message = from->message; } diff --git a/tests/c/c_MessageTest.cc b/tests/c/c_MessageTest.cc index 7a70ba33..234bea92 100644 --- a/tests/c/c_MessageTest.cc +++ b/tests/c/c_MessageTest.cc @@ -30,14 +30,11 @@ TEST(c_MessageTest, MessageCopy) { pulsar_message_t *from = pulsar_message_create(); pulsar_message_set_content(from, "hello", 5); from->message = from->builder.build(); - std::cout << "from: " << (const char *)pulsar_message_get_data(from) << std::endl; - pulsar_message_t *to = pulsar_message_create(); - pulsar_message_copy(from, to); - pulsar_message_free(from); - std::cout << "to: " << (const char *)pulsar_message_get_data(to) << std::endl; - ASSERT_STREQ((const char *)pulsar_message_get_data(to), "hello"); + pulsar_message_copy(from, to); + ASSERT_STREQ((const char *)pulsar_message_get_data(to), (const char *)pulsar_message_get_data(from)); + pulsar_message_free(from); pulsar_message_free(to); } From e07c29f12ca2b8b2cd8b9ae187452193ee5d36c7 Mon Sep 17 00:00:00 2001 From: Baodi Shi Date: Wed, 21 Jun 2023 15:58:11 +0800 Subject: [PATCH 3/3] Remove redundant code. --- tests/c/c_MessageTest.cc | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/tests/c/c_MessageTest.cc b/tests/c/c_MessageTest.cc index 234bea92..a64a9901 100644 --- a/tests/c/c_MessageTest.cc +++ b/tests/c/c_MessageTest.cc @@ -17,15 +17,9 @@ * under the License. */ #include -#include -#include +#include #include -struct _pulsar_message { - pulsar::MessageBuilder builder; - pulsar::Message message; -}; - TEST(c_MessageTest, MessageCopy) { pulsar_message_t *from = pulsar_message_create(); pulsar_message_set_content(from, "hello", 5);