aboutsummaryrefslogtreecommitdiff
path: root/c/pl.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'c/pl.cpp')
-rw-r--r--c/pl.cpp26
1 files changed, 15 insertions, 11 deletions
diff --git a/c/pl.cpp b/c/pl.cpp
index 46ed717..a1849db 100644
--- a/c/pl.cpp
+++ b/c/pl.cpp
@@ -78,16 +78,20 @@ int Query::NextSolution()
}
/* Convert Prolog term to normal or wide characters. */
-int PL_get_tchars(const term_t t, TCHAR** const pTsz, const int iFlags)
+template <>
+int PlString<char>(const term_t t, std::string* const pStr, const int iFlags)
{
-#ifdef UNICODE
- size_t len;
- if (!PL_get_wchars(t, &len, pTsz, iFlags))
- return 0;
- return len;
-#else
- if (!PL_get_chars(t, pTsz, iFlags))
- return 0;
- return -1;
-#endif
+ char* sz;
+ int r = PL_get_chars(t, &sz, iFlags);
+ if (r) *pStr = sz;
+ return r;
+}
+
+template <>
+int PlString<wchar_t>(const term_t t, std::wstring* const pWstr, const int iFlags)
+{
+ char* sz;
+ int r = PL_get_chars(t, &sz, iFlags);
+ if (r) *pWstr = BstrFromSz<wchar_t>(sz);
+ return r;
}