blob: 537bb709e3b2e06867a4875a6761dfd75d2e5803 [file] [log] [blame]
/**
* 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 <pulsar/c/message_id.h>
#include "c_structs.h"
#include <mutex>
#include <sstream>
std::once_flag initialized;
static pulsar_message_id_t earliest;
static pulsar_message_id_t latest;
static void initialize() {
earliest.messageId = pulsar::MessageId::earliest();
latest.messageId = pulsar::MessageId::latest();
}
const pulsar_message_id_t *pulsar_message_id_earliest() {
std::call_once(initialized, &initialize);
return &earliest;
}
const pulsar_message_id_t *pulsar_message_id_latest() {
std::call_once(initialized, &initialize);
return &latest;
}
void *pulsar_message_id_serialize(pulsar_message_id_t *messageId, int *len) {
std::string str;
messageId->messageId.serialize(str);
void *p = malloc(str.length());
memcpy(p, str.c_str(), str.length());
*len = str.length();
return p;
}
pulsar_message_id_t *pulsar_message_id_deserialize(const void *buffer, uint32_t len) {
std::string strId((const char *)buffer, len);
pulsar_message_id_t *messageId = new pulsar_message_id_t;
messageId->messageId = pulsar::MessageId::deserialize(strId);
return messageId;
}
char *pulsar_message_id_str(pulsar_message_id_t *messageId) {
std::stringstream ss;
ss << messageId->messageId;
std::string s = ss.str();
#ifdef _MSC_VER
// strndup is not available in MSVC
char *sdup = (char *)malloc(s.length() + 1);
memcpy(sdup, s.c_str(), s.length());
sdup[s.length()] = '\0';
return sdup;
#else
return strndup(s.c_str(), s.length());
#endif
}
void pulsar_message_id_free(pulsar_message_id_t *messageId) { delete messageId; }