text: /*
   * %CopyrightBegin%
   *
   * Copyright Ericsson AB 2014-2016. All Rights Reserved.
   *
   * Licensed under the Apache License, Version 2.0 (the "License");
   * you may not use this file except in compliance with the License.
   * You may obtain a copy of the License at
   *
   *     http://www.apache.org/licenses/LICENSE-2.0
   *
   * Unless required by applicable law or agreed to in writing, software
   * distributed under the License is distributed on an "AS IS" BASIS,
   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   * See the License for the specific language governing permissions and
   * limitations under the License.
   *
   * %CopyrightEnd%
   */
  
  #ifndef _WXE_MEMORY_H
  #define	_WXE_MEMORY_H
  
  class wxeMemEnv
  {
  public:
      wxeMemEnv()
      {
  	ref2ptr = (void **) driver_alloc(128*sizeof(void *));
  	ref2ptr[0] = NULL;
  	next = 1;
  	max = 128;
      };
    ~wxeMemEnv()
    { driver_free(ref2ptr); };
    int  next;
    int  max;
    void ** ref2ptr;
    intList  free;
    ErlDrvTermData owner;
  };
  
  class wxeRefData {
   public:
     wxeRefData(unsigned int dref, int ttype, int is_new, wxeMemEnv *menv) :
     ref(dref), type(ttype), alloc_in_erl(is_new), memenv(menv), pid(-1) { } ;
     int ref;
     int type;
     // 0 = wxWindow subclasses, 1 = wxObject subclasses
     // 2 = wxDialog subclasses, 3 = allocated wxObjects but not returned from new
     // 4 = wxGraphicsObjects or it's subclasses that can no be overloaded
     // 8 = wxObjects that should always be deleted directly (wxDC derivates)
     // > 10 classes which lack virtual destr, or are supposed to be allocated on
     //     the stack
     bool alloc_in_erl;
     wxeMemEnv *memenv;
     ErlDrvTermData pid;
  };
  
  WX_DECLARE_HASH_MAP(ErlDrvTermData, wxeMemEnv*, wxIntegerHash, wxIntegerEqual, wxeMemMap);
  
  WX_DECLARE_VOIDPTR_HASH_MAP(wxeRefData *, ptrMap);
  
  #endif
  