//===------- SharedMaps.h - Maps for the shared class loader --------------===//
//
//                              JnJVM
//
// This file is distributed under the University of Illinois Open Source
// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//

#include "LockedMap.h"

#ifndef ISOLATE_JNJVM_SHARED_MAPS_H
#define ISOLATE_JNJVM_SHARED_MAPS_H

namespace jnjvm {


struct ltarray {
 bool operator()(const ArrayUInt8* a1, const ArrayUInt8* a2) {
  if (a1->size < a2->size) return true;
    else if (a1->size > a2->size) return false;
    else return memcmp((const char*)a1->elements, (const char*)a2->elements, 
                       a1->size * sizeof(uint8)) < 0;
 }
};


class SharedClassByteMap : 
    public LockedMap<const ArrayUInt8*, Class*, ltarray, JnjvmClassLoader* > {
public:
  static VirtualTable* VT;
  
  SharedClassByteMap() {
    lock = mvm::Lock::allocNormal();
  }

  ~SharedClassByteMap() {
    delete lock;
  }
  
  virtual void TRACER;
};


class SharedClassNameMap : 
    public LockedMap<const UTF8*, CommonClass*, ltutf8, JnjvmClassLoader* > {
public:
  
  SharedClassNameMap() {
    lock = mvm::Lock::allocNormal();
  }

  ~SharedClassNameMap() {
    delete lock;
  }

};

} // end namespace jnjvm

#endif //ISOLATE_JNJVM_SHARED_MAPS_H
