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

#ifndef __java_util_jar_Attributes__
#define __java_util_jar_Attributes__

#pragma interface

#include <java/lang/Object.h>

class java::util::jar::Attributes : public ::java::lang::Object
{

public:
  Attributes();
  Attributes(jint);
  Attributes(::java::util::jar::Attributes *);
  virtual ::java::lang::String * getValue(::java::lang::String *);
  virtual ::java::lang::String * getValue(::java::util::jar::Attributes$Name *);
  virtual ::java::lang::String * putValue(::java::lang::String *, ::java::lang::String *);
private:
  ::java::lang::String * putValue(::java::util::jar::Attributes$Name *, ::java::lang::String *);
public:
  virtual ::java::lang::Object * clone();
  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 jint hashCode();
  virtual jboolean isEmpty();
  virtual ::java::util::Set * keySet();
  virtual ::java::lang::Object * put(::java::lang::Object *, ::java::lang::Object *);
  virtual void putAll(::java::util::Map *);
  virtual ::java::lang::Object * remove(::java::lang::Object *);
  virtual jint size();
  virtual ::java::util::Collection * values();
public: // actually protected
  ::java::util::Map * __attribute__((aligned(__alignof__( ::java::lang::Object)))) map;
public:
  static ::java::lang::Class class$;
};

#endif // __java_util_jar_Attributes__
