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

#ifndef __javax_print_attribute_ResolutionSyntax__
#define __javax_print_attribute_ResolutionSyntax__

#pragma interface

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

extern "Java"
{
  namespace javax
  {
    namespace print
    {
      namespace attribute
      {
          class ResolutionSyntax;
      }
    }
  }
}

class javax::print::attribute::ResolutionSyntax : public ::java::lang::Object
{

public:
  ResolutionSyntax(jint, jint, jint);
  virtual jboolean equals(::java::lang::Object *);
  virtual jint getCrossFeedResolution(jint);
public: // actually protected
  virtual jint getCrossFeedResolutionDphi();
public:
  virtual jint getFeedResolution(jint);
public: // actually protected
  virtual jint getFeedResolutionDphi();
public:
  virtual JArray< jint > * getResolution(jint);
  virtual jint hashCode();
  virtual jboolean lessThanOrEquals(::javax::print::attribute::ResolutionSyntax *);
  virtual ::java::lang::String * toString();
  virtual ::java::lang::String * toString(jint, ::java::lang::String *);
private:
  static const jlong serialVersionUID = 2706743076526672017LL;
public:
  static const jint DPCM = 254;
  static const jint DPI = 100;
private:
  jint __attribute__((aligned(__alignof__( ::java::lang::Object)))) crossFeedResolution;
  jint feedResolution;
public:
  static ::java::lang::Class class$;
};

#endif // __javax_print_attribute_ResolutionSyntax__
