aboutsummaryrefslogtreecommitdiffstats
path: root/lib/wx/c_src/wxe_return.h
diff options
context:
space:
mode:
authorDan Gudmundsson <[email protected]>2015-05-20 12:53:44 +0200
committerDan Gudmundsson <[email protected]>2015-06-01 13:07:33 +0200
commit01c0f71f9e963b2c6fbc9417c8a414345d524609 (patch)
treedec0a9595b9ee827633ba7ea05af8a40526a2e9f /lib/wx/c_src/wxe_return.h
parent7819974d320c8fdf4994a6b76a3ad2d686065a6b (diff)
downloadotp-01c0f71f9e963b2c6fbc9417c8a414345d524609.tar.gz
otp-01c0f71f9e963b2c6fbc9417c8a414345d524609.tar.bz2
otp-01c0f71f9e963b2c6fbc9417c8a414345d524609.zip
wx: Optimize event and return value construction
Preallocated an rt array of 64 items (which covers 99%) of the calls and thus avoids allocation and copying in most cases.
Diffstat (limited to 'lib/wx/c_src/wxe_return.h')
-rw-r--r--lib/wx/c_src/wxe_return.h22
1 files changed, 11 insertions, 11 deletions
diff --git a/lib/wx/c_src/wxe_return.h b/lib/wx/c_src/wxe_return.h
index a157348f1d..6729789116 100644
--- a/lib/wx/c_src/wxe_return.h
+++ b/lib/wx/c_src/wxe_return.h
@@ -40,10 +40,7 @@ extern "C" {
#include <wx/html/htmlcell.h>
-// #define send() send_term(__FILE__, __LINE__)
-
-// see http://docs.wxwidgets.org/stable/wx_wxarray.html
-WX_DECLARE_OBJARRAY(ErlDrvTermData, wxErlDrvTermDataArray);
+#define RT_BUFF_SZ 64
class wxeReturn {
@@ -57,7 +54,6 @@ public:
void add(ErlDrvTermData type, ErlDrvTermData data);
- // void addRef(const void *ptr, const char* className);
void addRef(const unsigned int ref, const char* className);
void addAtom(const char* atomName);
@@ -65,8 +61,8 @@ public:
void addExt2Term(wxeErlTerm * term);
void addExt2Term(wxETreeItemData * term);
- void addNil() { rt.Add(ERL_DRV_NIL); };
-
+ void addNil() { do_add(ERL_DRV_NIL); };
+
void addUint(unsigned int n);
void addInt(int n);
@@ -116,6 +112,8 @@ public:
void add(const wxHtmlLinkInfo &val);
+ void do_add(ErlDrvTermData val);
+
void ensureFloatCount(size_t n);
int send();
@@ -129,15 +127,17 @@ private:
inline void addDate(wxDateTime dateTime);
inline void addTime(wxDateTime dateTime);
-
-// WxeApp* wxe_app;
+
ErlDrvTermData caller;
ErlDrvTermData port;
-// wxeMemEnv *memEnv;
- wxErlDrvTermDataArray rt;
wxArrayDouble temp_float;
wxMBConvUTF32 utfConverter;
bool isResult;
+
+ unsigned int rt_max;
+ unsigned int rt_n;
+ ErlDrvTermData *rtb;
+ ErlDrvTermData buff[RT_BUFF_SZ];
};
#endif /* _WXE_RETURN_H */