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

#ifndef __java_security_Provider__
#define __java_security_Provider__

#pragma interface

#include <java/util/Properties.h>
extern "Java"
{
  namespace java
  {
    namespace security
    {
        class Provider;
    }
  }
}

class java::security::Provider : public ::java::util::Properties
{

public: // actually protected
  Provider(::java::lang::String *, jdouble, ::java::lang::String *);
public:
  virtual ::java::lang::String * getName();
  virtual jdouble getVersion();
  virtual ::java::lang::String * getInfo();
  virtual ::java::lang::Object * put(::java::lang::Object *, ::java::lang::Object *);
  virtual ::java::lang::Object * get(::java::lang::Object *);
  virtual ::java::lang::Object * remove(::java::lang::Object *);
  virtual void clear();
  virtual ::java::lang::String * toString();
private:
  ::java::lang::Object * toCanonicalKey(::java::lang::Object *);
  static const jlong serialVersionUID = -4298000515446427739LL;
  ::java::lang::String * __attribute__((aligned(__alignof__( ::java::util::Properties)))) info;
  ::java::lang::String * name;
  jdouble version;
public:
  static ::java::lang::Class class$;
};

#endif // __java_security_Provider__
