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

#ifndef __gnu_javax_swing_text_html_parser_SmallHtmlAttributeSet__
#define __gnu_javax_swing_text_html_parser_SmallHtmlAttributeSet__

#pragma interface

#include <java/lang/Object.h>
#include <gcj/array.h>

extern "Java"
{
  namespace gnu
  {
    namespace javax
    {
      namespace swing
      {
        namespace text
        {
          namespace html
          {
            namespace parser
            {
                class SmallHtmlAttributeSet;
            }
          }
        }
      }
    }
  }
  namespace javax
  {
    namespace swing
    {
      namespace text
      {
          class AttributeSet;
      }
    }
  }
}

class gnu::javax::swing::text::html::parser::SmallHtmlAttributeSet : public ::java::lang::Object
{

public:
  SmallHtmlAttributeSet(::javax::swing::text::AttributeSet *);
  virtual jboolean containsAttribute(::java::lang::Object *, ::java::lang::Object *);
  virtual jboolean containsAttributes(::javax::swing::text::AttributeSet *);
  virtual ::javax::swing::text::AttributeSet * copyAttributes();
  virtual ::java::lang::Object * getAttribute(::java::lang::Object *);
  virtual jint getAttributeCount();
  virtual ::java::util::Enumeration * getAttributeNames();
  virtual ::javax::swing::text::AttributeSet * getResolveParent();
  virtual jboolean isDefined(::java::lang::Object *);
  virtual jboolean isEqual(::javax::swing::text::AttributeSet *);
public: // actually protected
  virtual ::java::lang::Object * clone();
private:
  static const jlong serialVersionUID = 1LL;
public: // actually package-private
  JArray< ::java::lang::Object * > * __attribute__((aligned(__alignof__( ::java::lang::Object)))) keys;
  JArray< ::java::lang::Object * > * values;
  ::javax::swing::text::AttributeSet * parent;
public:
  static ::java::lang::Class class$;
};

#endif // __gnu_javax_swing_text_html_parser_SmallHtmlAttributeSet__
