7 #ifndef LLU_WSTP_PUT_H_
8 #define LLU_WSTP_PUT_H_
22 using Func = std::function<int(WSLINK,
const T*,
const int*,
const char**,
int)>;
24 static void put(WSLINK m,
const T* array,
const int* dims,
const char** heads,
int len) {
28 static void put(WSLINK m,
const T* array,
const int* dims,
char** heads,
int len) {
34 static const std::string ArrayFName;
40 using Func = std::function<int(WSLINK,
const T*,
int)>;
42 static void put(WSLINK m,
const T* list,
int len) {
47 static const std::string ListFName;
53 using Func = std::function<int(WSLINK, T)>;
55 static void put(WSLINK m, T scalar) {
60 static const std::string ScalarFName;
65 typename PutArray<T>::Func PutArray<T>::ArrayF = [](WSLINK ,
const T* ,
const int* ,
const char** ,
int ) {
66 static_assert(dependent_false_v<T>,
"Trying to use WS::PutArray<T> for unsupported type T");
71 typename PutList<T>::Func PutList<T>::ListF = [](WSLINK ,
const T* ,
int ) {
72 static_assert(dependent_false_v<T>,
"Trying to use WS::PutList<T> for unsupported type T");
77 typename PutScalar<T>::Func PutScalar<T>::ScalarF = [](WSLINK , T ) {
78 static_assert(dependent_false_v<T>,
"Trying to use WS::PutScalar<T> for unsupported type T");
85 #define WS_PUT_DECLARE_SPECIALIZATIONS_OF_STATIC_MEMBERS(T) \
87 PutArray<T>::Func PutArray<T>::ArrayF; \
89 const std::string PutArray<T>::ArrayFName; \
91 PutList<T>::Func PutList<T>::ListF; \
93 const std::string PutList<T>::ListFName; \
95 PutScalar<T>::Func PutScalar<T>::ScalarF; \
97 const std::string PutScalar<T>::ScalarFName;
99 WS_PUT_DECLARE_SPECIALIZATIONS_OF_STATIC_MEMBERS(
unsigned char)
100 WS_PUT_DECLARE_SPECIALIZATIONS_OF_STATIC_MEMBERS(
short)
101 WS_PUT_DECLARE_SPECIALIZATIONS_OF_STATIC_MEMBERS(
int)
102 WS_PUT_DECLARE_SPECIALIZATIONS_OF_STATIC_MEMBERS(wsint64)
103 WS_PUT_DECLARE_SPECIALIZATIONS_OF_STATIC_MEMBERS(
float)
104 WS_PUT_DECLARE_SPECIALIZATIONS_OF_STATIC_MEMBERS(
double)
115 PutArray<unsigned char>::Func PutArray<unsigned char>::ArrayF = WSPutInteger8Array;
118 const std::string PutArray<unsigned char>::ArrayFName =
"WSPutInteger8Array";
123 PutList<unsigned char>::Func PutList<unsigned char>::ListF = WSPutInteger8List;
126 const std::string PutList<unsigned char>::ListFName =
"WSPutInteger8List";
131 PutScalar<unsigned char>::Func PutScalar<unsigned char>::ScalarF = WSPutInteger8;
134 const std::string PutScalar<unsigned char>::ScalarFName =
"WSPutInteger8";
143 PutArray<short>::Func PutArray<short>::ArrayF = WSPutInteger16Array;
146 const std::string PutArray<short>::ArrayFName =
"WSPutInteger16Array";
151 PutList<short>::Func PutList<short>::ListF = WSPutInteger16List;
154 const std::string PutList<short>::ListFName =
"WSPutInteger16List";
159 PutScalar<short>::Func PutScalar<short>::ScalarF = WSPutInteger16;
162 const std::string PutScalar<short>::ScalarFName =
"WSPutInteger16";
171 PutArray<int>::Func PutArray<int>::ArrayF = WSPutInteger32Array;
174 const std::string PutArray<int>::ArrayFName =
"WSPutInteger32Array";
179 PutList<int>::Func PutList<int>::ListF = WSPutInteger32List;
182 const std::string PutList<int>::ListFName =
"WSPutInteger32List";
187 PutScalar<int>::Func PutScalar<int>::ScalarF = WSPutInteger32;
190 const std::string PutScalar<int>::ScalarFName =
"WSPutInteger32";
199 PutArray<wsint64>::Func PutArray<wsint64>::ArrayF = WSPutInteger64Array;
202 const std::string PutArray<wsint64>::ArrayFName =
"WSPutInteger64Array";
207 PutList<wsint64>::Func PutList<wsint64>::ListF = WSPutInteger64List;
210 const std::string PutList<wsint64>::ListFName =
"WSPutInteger64List";
215 PutScalar<wsint64>::Func PutScalar<wsint64>::ScalarF = WSPutInteger64;
218 const std::string PutScalar<wsint64>::ScalarFName =
"WSPutInteger64";
227 PutArray<float>::Func PutArray<float>::ArrayF = WSPutReal32Array;
230 const std::string PutArray<float>::ArrayFName =
"WSPutReal32Array";
235 PutList<float>::Func PutList<float>::ListF = WSPutReal32List;
238 const std::string PutList<float>::ListFName =
"WSPutReal32List";
243 PutScalar<float>::Func PutScalar<float>::ScalarF = WSPutReal32;
246 const std::string PutScalar<float>::ScalarFName =
"WSPutReal32";
255 PutArray<double>::Func PutArray<double>::ArrayF = WSPutReal64Array;
258 const std::string PutArray<double>::ArrayFName =
"WSPutReal64Array";
263 PutList<double>::Func PutList<double>::ListF = WSPutReal64List;
266 const std::string PutList<double>::ListFName =
"WSPutReal64List";
271 PutScalar<double>::Func PutScalar<double>::ScalarF = WSPutReal64;
274 const std::string PutScalar<double>::ScalarFName =
"WSPutReal64";