From ebabd34385feb629b759216c1f7d85edc20bf2fd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?John=20Ankarstr=C3=B6m?= Date: Sat, 30 Jul 2022 03:14:13 +0200 Subject: Add wstring_owner, replacing std::wstring. std::basic_string is nice, but it is not very ergonomic if everything you really need is to automatically free C strings at end of scope. I suppose I could have used std::unique_ptr for this, but I suspect the ergonomics would be worse. --- c/pl.h | 16 ++++------------ 1 file changed, 4 insertions(+), 12 deletions(-) (limited to 'c/pl.h') diff --git a/c/pl.h b/c/pl.h index c0af4bc..c7fcfc8 100644 --- a/c/pl.h +++ b/c/pl.h @@ -7,7 +7,7 @@ #include "common.h" -int PlString(term_t t, std::wstring* pWs, int iFlags = CVT_WRITE); +wstring_owner PlString(const term_t t, const int iFlags = CVT_WRITE); struct Frame { @@ -54,8 +54,7 @@ inline int PlPut(term_t, long*) { return -1; } inline int PlPut(term_t, long long*) { return -1; } inline int PlPut(term_t, atom_t*) { return -1; } inline int PlPut(term_t, char**) { return -1; } -inline int PlPut(term_t, std::string*) { return -1; } -inline int PlPut(term_t, std::wstring*) { return -1; } +inline int PlPut(term_t, wstring_owner*) { return -1; } inline int PlGet(term_t, int) { return -1; } inline int PlGet(term_t, long) { return -1; } @@ -68,18 +67,11 @@ inline int PlGet(term_t t, long* x) { return PL_get_long(t, x); } inline int PlGet(term_t t, long long* x) { return PL_get_int64(t, x); } inline int PlGet(term_t t, atom_t* x) { return PL_get_atom(t, x); } inline int PlGet(term_t t, char** x) { return PL_get_atom_chars(t, x); } -inline int PlGet(term_t t, std::string* x) { +inline int PlGet(term_t t, wstring_owner* x) { Mark m; char* sz; if (!PlGet(t, &sz)) return 0; - *x = sz; - return 1; -} -inline int PlGet(term_t t, std::wstring* x) { - Mark m; - char* sz; - if (!PlGet(t, &sz)) return 0; - *x = WsFromSz(sz); + *x = WsoFromSz(sz); return 1; /* or catch potential exception from BstrFromSz? */ } -- cgit v1.2.3