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

#ifndef __gnu_javax_print_ipp_attribute_supported_PrinterResolutionSupported__
#define __gnu_javax_print_ipp_attribute_supported_PrinterResolutionSupported__

#pragma interface

#include <javax/print/attribute/ResolutionSyntax.h>
#include <gcj/array.h>

extern "Java"
{
  namespace gnu
  {
    namespace javax
    {
      namespace print
      {
        namespace ipp
        {
          namespace attribute
          {
            namespace supported
            {
                class PrinterResolutionSupported;
            }
          }
        }
      }
    }
  }
  namespace javax
  {
    namespace print
    {
      namespace attribute
      {
        namespace standard
        {
            class PrinterResolution;
        }
      }
    }
  }
}

class gnu::javax::print::ipp::attribute::supported::PrinterResolutionSupported : public ::javax::print::attribute::ResolutionSyntax
{

public:
  PrinterResolutionSupported(jint, jint, jint);
  jboolean equals(::java::lang::Object *);
  ::java::lang::Class * getCategory();
  ::java::lang::String * getName();
  ::javax::print::attribute::standard::PrinterResolution * getAssociatedAttribute();
  static JArray< ::javax::print::attribute::standard::PrinterResolution * > * getAssociatedAttributeArray(::java::util::Set *);
  static ::java::lang::Class class$;
};

#endif // __gnu_javax_print_ipp_attribute_supported_PrinterResolutionSupported__
