
// DO NOT EDIT THIS FILE - it is machine generated -*- c++ -*-

#ifndef __java_util_Collections$UnmodifiableMap__
#define __java_util_Collections$UnmodifiableMap__

#pragma interface

#include <java/lang/Object.h>

class java::util::Collections$UnmodifiableMap : public ::java::lang::Object
{

public: // actually package-private
  Collections$UnmodifiableMap(::java::util::Map *);
public:
  virtual void clear();
  virtual jboolean containsKey(::java::lang::Object *);
  virtual jboolean containsValue(::java::lang::Object *);
  virtual ::java::util::Set * entrySet();
  virtual jboolean equals(::java::lang::Object *);
  virtual ::java::lang::Object * get(::java::lang::Object *);
  virtual ::java::lang::Object * put(::java::lang::Object *, ::java::lang::Object *);
  virtual jint hashCode();
  virtual jboolean isEmpty();
  virtual ::java::util::Set * keySet();
  virtual void putAll(::java::util::Map *);
  virtual ::java::lang::Object * remove(::java::lang::Object *);
  virtual jint size();
  virtual ::java::lang::String * toString();
  virtual ::java::util::Collection * values();
private:
  static const jlong serialVersionUID = -1034234728574286014LL;
  ::java::util::Map * __attribute__((aligned(__alignof__( ::java::lang::Object)))) m;
  ::java::util::Set * entries;
  ::java::util::Set * keys;
  ::java::util::Collection * values__;
public:
  static ::java::lang::Class class$;
};

#endif // __java_util_Collections$UnmodifiableMap__
