aboutsummaryrefslogblamecommitdiffstats
path: root/lib/wx/c_src/wxe_helpers.h
blob: ec3a5debdbd199ab0ca00ad3ef1ff140eff903d3 (plain) (tree)








































                                                                                    
                

        
                 

                                          

                                         






                            




















                                                           













                                                             






                                           











































                                                                           
/*
 * %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:
    wxeCommand();
    virtual ~wxeCommand(); // Use Delete()

    wxeCommand * Save() { return this; };
    void Delete();

    ErlDrvTermData   caller;
    ErlDrvTermData   port;
    WXEBinRef *      bin[3];
    char *           buffer;
    int              len;
    int              op;
    char             c_buf[64];  // 64b covers 90% of usage
};

class wxeFifo {
 public:
    wxeFifo(unsigned int size);
    virtual ~wxeFifo();

    void Add(int fc, char * cbuf,int buflen, wxe_data *);
    void Append(wxeCommand *Other);

    wxeCommand * Get();

    void Realloc();

    unsigned int m_max;
    unsigned int m_first;
    unsigned int m_n;
    unsigned int m_orig_sz;
    wxeCommand *m_q;
    wxeCommand *m_old;
};

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