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

#ifndef __gnu_javax_print_ipp_IppUtilities__
#define __gnu_javax_print_ipp_IppUtilities__

#pragma interface

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

extern "Java"
{
  namespace gnu
  {
    namespace javax
    {
      namespace print
      {
        namespace ipp
        {
            class IppUtilities;
        }
      }
    }
  }
  namespace javax
  {
    namespace print
    {
      namespace attribute
      {
          class Attribute;
      }
    }
  }
}

class gnu::javax::print::ipp::IppUtilities : public ::java::lang::Object
{

  IppUtilities();
public:
  static ::java::lang::Class * getClass(::java::lang::String *);
  static ::java::lang::String * getSupportedAttrName(::java::lang::Class *);
  static ::java::lang::Class * getSupportedCategory(::java::lang::Class *);
  static jint convertToInt(JArray< jbyte > *);
  static jint convertToInt(jbyte, jbyte, jbyte, jbyte);
  static jshort convertToShort(jbyte, jbyte);
  static ::javax::print::attribute::Attribute * getEnumAttribute(::java::lang::String *, ::java::lang::Object *);
  static ::javax::print::attribute::Attribute * getIntegerAttribute(::java::lang::String *, jint);
  static ::javax::print::attribute::Attribute * getTextAttribute(::java::lang::String *, jbyte, JArray< jbyte > *);
private:
  static JArray< ::java::lang::Object * > * INTEGER_ATT_VALUE;
  static JArray< ::java::lang::Class * > * INTEGER_CLASS_ARRAY;
  static JArray< ::java::lang::Object * > * TEXT_ATT_VALUE;
  static JArray< ::java::lang::Class * > * TEXT_CLASS_ARRAY;
  static ::java::util::HashMap * classesByName;
  static ::java::util::HashMap * instanceByClass;
public:
  static ::java::lang::Class class$;
};

#endif // __gnu_javax_print_ipp_IppUtilities__
