21 #ifndef _CHEERP_CLIENT_a335cd00 22 #define _CHEERP_CLIENT_a335cd00 24 #include "cheerp/types.h" 25 #include "cheerp/clientlib.h" 26 #include <cheerpintrin.h> 32 namespace [[cheerp::genericjs]]
cheerp 35 template<
typename... Args>
36 void console_log(
const char* message, Args&&... optionalParams)
51 static double date_now()
53 return client::Date::now();
63 template<
class T,
class... Args>
64 static R
invoke(T* func, Args... args)
66 auto ret = (*func)(
static_cast<Args&&
>(args)...);
75 template<
class T,
class... Args>
76 static void invoke(T* func, Args... args)
78 (*func)(
static_cast<Args&&
>(args)...);
83 template<
class T,
class R,
class... Args>
86 typedef R (func_type)(Args...);
94 template<
class T,
class R,
class... Args>
97 typedef R (func_type)(Args...);
100 return __builtin_cheerp_make_complete_object<client::EventListener>((func_type*)func);
104 template<
class T,
class C,
class R,
class... Args>
106 public CallbackHelperBase<T, std::is_convertible<T, R(*)(Args...)>::value, R, Args...>
110 template<
class T,
class C,
class R,
class... Args>
112 public CallbackHelperBase<T, std::is_convertible<T, R(*)(Args...)>::value, R, Args...>
124 typedef decltype(&T::operator()) lambda_type;
126 return callback_helper::make_callback(func);
133 template<
class R,
class... Args>
136 return __builtin_cheerp_make_complete_object<client::EventListener>(func);
190 template<typename P,typename T=typename TypedArrayForPointerType<P>::type>
193 size_t offset=__builtin_cheerp_pointer_offset(ptr);
194 T* buf=__builtin_cheerp_make_complete_object<T>(__builtin_cheerp_pointer_base<T>(ptr));
195 size_t elementSize=
sizeof(P);
197 return offset==0 ? buf : buf->subarray(offset);
199 return offset==0 && buf->get_length()==size/elementSize ? buf : buf->subarray(offset, offset+size/elementSize);
205 size_t offset=__builtin_cheerp_pointer_offset(ptr);
207 client::Int8Array* buf=__builtin_cheerp_make_complete_object<client::Int8Array>(__builtin_cheerp_pointer_base<client::Int8Array>(ptr));
210 return new T(buf->
get_buffer(), offset*elementSize);
213 size_t newElementSize =
sizeof((*((T*)
nullptr))[0]);
214 return new T(buf->
get_buffer(), offset*elementSize, size/newElementSize);
220 size_t offset=__builtin_cheerp_pointer_offset(ptr);
222 client::Int8Array* buf=__builtin_cheerp_make_complete_object<client::Int8Array>(__builtin_cheerp_pointer_base<client::Int8Array>(ptr));
225 return offset==0 ? buf : buf->
subarray(offset);
227 return offset==0 && buf->
get_length()==size/elementSize ? buf : buf->
subarray(offset, offset+size/elementSize);
250 return (*obj)[index];
252 decltype((*static_cast<const T*>(obj))[0])
operator[](
int index)
const 254 return (*obj)[index];
266 #define CHEERP_SAFE_INLINE(r, p, x, ...) ({ struct [[cheerp::genericjs]] CheerpTmp { static r Run p { x; } }; CheerpTmp::Run(__VA_ARGS__); }) 270 #define _CHEERP_ITER_0(WHAT, X) 271 #define _CHEERP_ITER_1(WHAT, X) WHAT(X) 272 #define _CHEERP_ITER_2(WHAT, X, ...) WHAT(X), _CHEERP_ITER_1(WHAT, __VA_ARGS__) 273 #define _CHEERP_ITER_3(WHAT, X, ...) WHAT(X), _CHEERP_ITER_2(WHAT, __VA_ARGS__) 274 #define _CHEERP_ITER_4(WHAT, X, ...) WHAT(X), _CHEERP_ITER_3(WHAT, __VA_ARGS__) 275 #define _CHEERP_ITER_5(WHAT, X, ...) WHAT(X), _CHEERP_ITER_4(WHAT, __VA_ARGS__) 276 #define _CHEERP_ITER_6(WHAT, X, ...) WHAT(X), _CHEERP_ITER_5(WHAT, __VA_ARGS__) 277 #define _CHEERP_ITER_7(WHAT, X, ...) WHAT(X), _CHEERP_ITER_6(WHAT, __VA_ARGS__) 278 #define _CHEERP_ITER_8(WHAT, X, ...) WHAT(X), _CHEERP_ITER_7(WHAT, __VA_ARGS__) 279 #define _CHEERP_ITER_9(WHAT, X, ...) WHAT(X), _CHEERP_ITER_8(WHAT, __VA_ARGS__) 280 #define _CHEERP_ITER_10(WHAT, X, ...) WHAT(X), _CHEERP_ITER_9(WHAT, __VA_ARGS__) 281 #define _CHEERP_ITER_11(WHAT, X, ...) WHAT(X), _CHEERP_ITER_10(WHAT, __VA_ARGS__) 282 #define _CHEERP_ITER_12(WHAT, X, ...) WHAT(X), _CHEERP_ITER_11(WHAT, __VA_ARGS__) 283 #define _CHEERP_ITER_13(WHAT, X, ...) WHAT(X), _CHEERP_ITER_12(WHAT, __VA_ARGS__) 284 #define _CHEERP_ITER_14(WHAT, X, ...) WHAT(X), _CHEERP_ITER_13(WHAT, __VA_ARGS__) 285 #define _CHEERP_ITER_15(WHAT, X, ...) WHAT(X), _CHEERP_ITER_14(WHAT, __VA_ARGS__) 286 #define _CHEERP_ITER_16(WHAT, X, ...) WHAT(X), _CHEERP_ITER_15(WHAT, __VA_ARGS__) 289 #define _CHEERP_GET_MACRO(_0 \ 307 #define _CHEERP_FOR_EACH(action,...) \ 308 _CHEERP_GET_MACRO(_0, ##__VA_ARGS__ \ 326 )(action,__VA_ARGS__) 329 #define _CHEERP_STRING_VALUE(...) _CHEERP_STRING_VALUE__(__VA_ARGS__) 330 #define _CHEERP_STRING_VALUE__(...) #__VA_ARGS__ 332 #define _CHEERP_FIELD(x) x :%[_## x ##_] 333 #define _CHEERP_REG(x) [_## x ##_]"r"(x) 334 #define CHEERP_OBJECT(...) ({client::Object* r;__asm__("{" _CHEERP_STRING_VALUE(_CHEERP_FOR_EACH(_CHEERP_FIELD, __VA_ARGS__)) "}" : "=r"(r) : _CHEERP_FOR_EACH(_CHEERP_REG, __VA_ARGS__));r;})
Definition: clientlib.h:1656
client::Int32Array type
Definition: client.h:175
Definition: clientlib.h:1790
client::Float64Array type
Definition: client.h:187
static client::EventListener * make_callback(const T &func)
Definition: client.h:87
T * operator->()
Definition: client.h:240
Definition: clientlib.h:1522
decltype((*obj) operator[][0])(int index)
Definition: client.h:248
ArrayRef< T > makeArrayRef(T *obj)
Definition: client.h:259
Definition: clientlib.h:1407
client::Uint8Array type
Definition: client.h:145
Int8Array * subarray(double begin)
client::Uint32Array type
Definition: client.h:169
Definition: clientlib.h:1455
Definition: clientlib.h:1723
Definition: clientlib.h:4724
client::Float32Array type
Definition: client.h:181
const T * operator->() const
Definition: client.h:244
ArrayRef(T *o)
Definition: client.h:237
client::ArrayBufferView * MakeArrayBufferView(const void *ptr, size_t size=0)
Definition: client.h:218
T * MakeTypedArray(const P *ptr, size_t size=0)
Definition: client.h:191
static R invoke(T *func, Args... args)
Definition: client.h:64
Definition: clientlib.h:1991
static client::EventListener * make_callback(const T &func)
Definition: client.h:98
void console_log(const char *message, Args &&... optionalParams)
Definition: client.h:36
client::Uint16Array type
Definition: client.h:157
ArrayBuffer * get_buffer()
double get_BYTES_PER_ELEMENT()
decltype((*static_cast< const T * >(obj)) operator[][0])(int index) const
Definition: client.h:252
Definition: clientlib.h:1924
client::EventListener * Callback(const T &func)
Definition: client.h:122
static void invoke(T *func, Args... args)
Definition: client.h:76
client::Int16Array type
Definition: client.h:163
Definition: clientlib.h:1857
client::Int8Array type
Definition: client.h:151