mirror of
https://github.com/mutouyun/cpp-ipc.git
synced 2025-12-07 01:06:45 +08:00
remove std::string from export interface
This commit is contained in:
parent
a3c90d9f8b
commit
f3a73fcc4d
@ -10,7 +10,7 @@ namespace ipc {
|
||||
|
||||
using shm::handle_t;
|
||||
|
||||
IPC_EXPORT handle_t connect (std::string const & name);
|
||||
IPC_EXPORT handle_t connect (char const * name);
|
||||
IPC_EXPORT void disconnect(handle_t h);
|
||||
|
||||
IPC_EXPORT bool send(handle_t h, void* data, int size);
|
||||
@ -19,7 +19,7 @@ IPC_EXPORT std::vector<byte_t> recv(handle_t h);
|
||||
class IPC_EXPORT channel {
|
||||
public:
|
||||
channel(void);
|
||||
channel(std::string const & name);
|
||||
channel(char const * name);
|
||||
channel(channel&& rhs);
|
||||
|
||||
~channel(void);
|
||||
@ -27,6 +27,8 @@ public:
|
||||
void swap(channel& rhs);
|
||||
channel& operator=(channel rhs);
|
||||
|
||||
bool connect(char const * name);
|
||||
|
||||
private:
|
||||
class channel_;
|
||||
channel_* p_;
|
||||
|
||||
@ -1,6 +1,5 @@
|
||||
#pragma once
|
||||
|
||||
#include <string>
|
||||
#include <cstddef>
|
||||
|
||||
#include "export.h"
|
||||
@ -10,7 +9,7 @@ namespace shm {
|
||||
|
||||
using handle_t = void*;
|
||||
|
||||
IPC_EXPORT handle_t acquire(std::string const & name, std::size_t size);
|
||||
IPC_EXPORT handle_t acquire(char const * name, std::size_t size);
|
||||
IPC_EXPORT void release(handle_t h, std::size_t size);
|
||||
IPC_EXPORT void* open (handle_t h);
|
||||
IPC_EXPORT void close (void* mem);
|
||||
@ -18,7 +17,7 @@ IPC_EXPORT void close (void* mem);
|
||||
class IPC_EXPORT handle {
|
||||
public:
|
||||
handle(void);
|
||||
handle(std::string const & name, std::size_t size);
|
||||
handle(char const * name, std::size_t size);
|
||||
handle(handle&& rhs);
|
||||
|
||||
~handle(void);
|
||||
@ -27,10 +26,10 @@ public:
|
||||
handle& operator=(handle rhs);
|
||||
|
||||
bool valid(void) const;
|
||||
std::size_t size(void) const;
|
||||
std::string const & name(void) const;
|
||||
std::size_t size (void) const;
|
||||
char const * name (void) const;
|
||||
|
||||
bool acquire(std::string const & name, std::size_t size);
|
||||
bool acquire(char const * name, std::size_t size);
|
||||
void release(void);
|
||||
|
||||
void* get (void);
|
||||
|
||||
11
src/ipc.cpp
11
src/ipc.cpp
@ -43,7 +43,7 @@ queue_t* queue_of(handle_t h) {
|
||||
|
||||
namespace ipc {
|
||||
|
||||
handle_t connect(std::string const & name) {
|
||||
handle_t connect(char const * name) {
|
||||
auto h = shm::acquire(name, sizeof(queue_t));
|
||||
if (h == nullptr) {
|
||||
return nullptr;
|
||||
@ -138,15 +138,16 @@ std::vector<byte_t> recv(handle_t h) {
|
||||
|
||||
class channel::channel_ {
|
||||
public:
|
||||
handle_t h_;
|
||||
};
|
||||
|
||||
channel::channel(void)
|
||||
: p_(new channel_) {
|
||||
}
|
||||
|
||||
channel::channel(std::string const & /*name*/)
|
||||
channel::channel(char const * name)
|
||||
: channel() {
|
||||
|
||||
connect(name);
|
||||
}
|
||||
|
||||
channel::channel(channel&& rhs)
|
||||
@ -167,4 +168,8 @@ channel& channel::operator=(channel rhs) {
|
||||
return *this;
|
||||
}
|
||||
|
||||
bool channel::connect(char const * name) {
|
||||
return false;
|
||||
}
|
||||
|
||||
} // namespace ipc
|
||||
|
||||
@ -9,11 +9,11 @@
|
||||
namespace ipc {
|
||||
namespace shm {
|
||||
|
||||
handle_t acquire(std::string const & name, std::size_t size) {
|
||||
if (name.empty() || size == 0) {
|
||||
handle_t acquire(char const * name, std::size_t size) {
|
||||
if (name == nullptr || name[0] == '\0' || size == 0) {
|
||||
return nullptr;
|
||||
}
|
||||
int fd = ::shm_open(name.c_str(), O_CREAT | O_RDWR,
|
||||
int fd = ::shm_open(name, O_CREAT | O_RDWR,
|
||||
S_IRUSR | S_IWUSR |
|
||||
S_IRGRP | S_IWGRP |
|
||||
S_IROTH | S_IWOTH);
|
||||
|
||||
@ -1,24 +1,26 @@
|
||||
#include <windows.h>
|
||||
|
||||
#include <type_traits>
|
||||
#include <string>
|
||||
#include <locale>
|
||||
#include <codecvt>
|
||||
#include <utility>
|
||||
|
||||
#include "shm.h"
|
||||
|
||||
namespace {
|
||||
|
||||
template <typename T, typename S, typename R = S>
|
||||
using IsSame = std::enable_if_t<std::is_same<T, typename S::value_type>::value, R>;
|
||||
|
||||
template <typename T = TCHAR>
|
||||
constexpr auto to_tchar(std::string const & str)
|
||||
-> std::enable_if_t<std::is_same<std::string::value_type, T>::value, std::string const &> {
|
||||
return str;
|
||||
constexpr auto to_tchar(std::string && str) -> IsSame<T, std::string, std::string &&> {
|
||||
return std::move(str);
|
||||
}
|
||||
|
||||
template <typename T = TCHAR>
|
||||
inline auto to_tchar(std::string const & str)
|
||||
-> std::enable_if_t<std::is_same<std::wstring::value_type, T>::value, std::wstring> {
|
||||
std::wstring_convert<std::codecvt_utf8_utf16<wchar_t>> converter;
|
||||
return converter.from_bytes(str);
|
||||
inline auto to_tchar(std::string && str) -> IsSame<T, std::wstring> {
|
||||
return std::wstring_convert<std::codecvt_utf8_utf16<wchar_t>>{}.from_bytes(std::move(str));
|
||||
}
|
||||
|
||||
} // internal-linkage
|
||||
@ -26,16 +28,15 @@ inline auto to_tchar(std::string const & str)
|
||||
namespace ipc {
|
||||
namespace shm {
|
||||
|
||||
handle_t acquire(std::string const & name, std::size_t size) {
|
||||
if (name.empty() || size == 0) {
|
||||
handle_t acquire(char const * name, std::size_t size) {
|
||||
if (name == nullptr || name[0] == '\0' || size == 0) {
|
||||
return nullptr;
|
||||
}
|
||||
HANDLE h = ::CreateFileMapping(
|
||||
INVALID_HANDLE_VALUE,
|
||||
NULL,
|
||||
INVALID_HANDLE_VALUE, NULL,
|
||||
PAGE_READWRITE | SEC_COMMIT,
|
||||
0, static_cast<DWORD>(size),
|
||||
to_tchar("__SHM__" + name).c_str()
|
||||
to_tchar(std::string{"__SHM__"} + name).c_str()
|
||||
);
|
||||
if (h == NULL) {
|
||||
return nullptr;
|
||||
|
||||
12
src/shm.cpp
12
src/shm.cpp
@ -1,3 +1,4 @@
|
||||
#include <string>
|
||||
#include <utility>
|
||||
|
||||
#include "shm.h"
|
||||
@ -25,7 +26,7 @@ handle::handle(void)
|
||||
p_->t_ = this;
|
||||
}
|
||||
|
||||
handle::handle(std::string const & name, std::size_t size)
|
||||
handle::handle(char const * name, std::size_t size)
|
||||
: handle() {
|
||||
acquire(name, size);
|
||||
}
|
||||
@ -56,16 +57,15 @@ std::size_t handle::size(void) const {
|
||||
return (p_ == nullptr) ? 0 : p_->s_;
|
||||
}
|
||||
|
||||
std::string const & handle::name(void) const {
|
||||
static const std::string dummy;
|
||||
return (p_ == nullptr) ? dummy : p_->n_;
|
||||
char const * handle::name(void) const {
|
||||
return (p_ == nullptr) ? "" : p_->n_.c_str();
|
||||
}
|
||||
|
||||
bool handle::acquire(std::string const & name, std::size_t size) {
|
||||
bool handle::acquire(char const * name, std::size_t size) {
|
||||
if (p_ == nullptr) return false;
|
||||
close();
|
||||
release();
|
||||
p_->h_ = shm::acquire(p_->n_ = name, p_->s_ = size);
|
||||
p_->h_ = shm::acquire((p_->n_ = name).c_str(), p_->s_ = size);
|
||||
return valid();
|
||||
}
|
||||
|
||||
|
||||
@ -33,15 +33,15 @@ void Unit::test_acquire(void) {
|
||||
|
||||
QVERIFY(shm_hd__.acquire("my-test-1", 1024));
|
||||
QVERIFY(shm_hd__.size() == 1024);
|
||||
QCOMPARE(shm_hd__.name().c_str(), "my-test-1");
|
||||
QCOMPARE(shm_hd__.name(), "my-test-1");
|
||||
|
||||
QVERIFY(shm_hd__.acquire("my-test-2", 2048));
|
||||
QVERIFY(shm_hd__.size() == 2048);
|
||||
QCOMPARE(shm_hd__.name().c_str(), "my-test-2");
|
||||
QCOMPARE(shm_hd__.name(), "my-test-2");
|
||||
|
||||
QVERIFY(shm_hd__.acquire("my-test-3", 4096));
|
||||
QVERIFY(shm_hd__.size() == 4096);
|
||||
QCOMPARE(shm_hd__.name().c_str(), "my-test-3");
|
||||
QCOMPARE(shm_hd__.name(), "my-test-3");
|
||||
}
|
||||
|
||||
void Unit::test_release(void) {
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user