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

#ifndef __java_util_Collections$SingletonMap__
#define __java_util_Collections$SingletonMap__

#pragma interface

#include <java/util/AbstractMap.h>

class java::util::Collections$SingletonMap : public ::java::util::AbstractMap
{

public: // actually package-private
  Collections$SingletonMap(::java::lang::Object *, ::java::lang::Object *);
public:
  ::java::util::Set * entrySet();
  jboolean containsKey(::java::lang::Object *);
  jboolean containsValue(::java::lang::Object *);
  ::java::lang::Object * get(::java::lang::Object *);
  jint hashCode();
  ::java::util::Set * keySet();
  jint size();
  ::java::util::Collection * values();
  ::java::lang::String * toString();
private:
  static const jlong serialVersionUID = -6979724477215052911LL;
  ::java::lang::Object * __attribute__((aligned(__alignof__( ::java::util::AbstractMap)))) k;
  ::java::lang::Object * v;
  ::java::util::Set * entries;
public:
  static ::java::lang::Class class$;
};

#endif // __java_util_Collections$SingletonMap__
