1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122
|
/*
* %CopyrightBegin%
*
* Copyright Ericsson AB 2014. All Rights Reserved.
*
* The contents of this file are subject to the Erlang Public License,
* Version 1.1, (the "License"); you may not use this file except in
* compliance with the License. You should have received a copy of the
* Erlang Public License along with this software. If not, it can be
* retrieved online at http://www.erlang.org/.
*
* Software distributed under the License is distributed on an "AS IS"
* basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
* the License for the specific language governing rights and limitations
* under the License.
*
* %CopyrightEnd%
*/
#ifndef _WXE_HELPER_H
#define _WXE_HELPER_H
DECLARE_EVENT_TYPE(wxeEVT_META_COMMAND, -1)
class wxeMetaCommand : public wxEvent
{
public:
wxeMetaCommand(wxe_data *sd, int EvId)
: wxEvent(EvId, wxeEVT_META_COMMAND)
{ caller = driver_caller(sd->port_handle); port = sd->port; pdl = sd->pdl; } ;
wxeMetaCommand(const wxeMetaCommand& event)
: wxEvent(event)
{ caller = event.caller; port = event.port; pdl = event.pdl; };
virtual ~wxeMetaCommand() {};
virtual wxEvent *Clone() const { return new wxeMetaCommand(*this); }
ErlDrvTermData caller;
ErlDrvTermData port;
ErlDrvPDL pdl;
};
class wxeCommand : public wxObject
{
public:
wxeCommand(int fc,char * cbuf,int buflen, wxe_data *);
virtual ~wxeCommand(); // Use Delete()
wxeCommand * Save() {ref_count++; return this; };
void Delete() {if(--ref_count < 1) delete this;};
ErlDrvTermData caller;
ErlDrvTermData port;
WXEBinRef * bin[3];
char * buffer;
int len;
int op;
int ref_count;
};
class intListElement {
public:
intListElement(int Element) {car = Element; cdr = NULL;};
intListElement(int Element, intListElement *list)
{car = Element; cdr = list;};
int car;
intListElement *cdr;
};
class intList {
public:
intList() {list = NULL;};
~intList() {
intListElement *head = list;
while(head) {
intListElement *tail=head->cdr;
delete head;
head = tail;
} };
bool IsEmpty() {return list == NULL;};
void Append(int Element) { list = new intListElement(Element, list); };
int Pop() {
intListElement *temp = list;
int res = list->car;
list = temp->cdr;
delete temp;
return res;
}
intListElement *list;
};
class wxe_badarg
{
public:
wxe_badarg(int Ref) : ref(Ref) { } ;
int ref;
};
class wxeErlTerm : public wxClientData
{
public:
wxeErlTerm(WXEBinRef * data)
{
size = data->size;
bin = (char *) driver_alloc(size);
memcpy(bin, data->base, size);
} ;
~wxeErlTerm() { driver_free(bin); };
char * bin;
int size;
};
class wxETreeItemData : public wxTreeItemData
{
public:
wxETreeItemData(int sz, char * data);
~wxETreeItemData();
int size;
char * bin;
};
#endif
|