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

#ifndef __java_security_Policy__
#define __java_security_Policy__

#pragma interface

#include <java/lang/Object.h>
extern "Java"
{
  namespace java
  {
    namespace security
    {
        class CodeSource;
        class Permission;
        class PermissionCollection;
        class Policy;
        class ProtectionDomain;
    }
  }
}

class java::security::Policy : public ::java::lang::Object
{

public:
  Policy();
  static ::java::security::Policy * getPolicy();
  static void setPolicy(::java::security::Policy *);
private:
  static void setup(::java::security::Policy *);
public: // actually package-private
  static ::java::security::Policy * getCurrentPolicy();
  static jboolean isLoaded();
public:
  virtual ::java::security::PermissionCollection * getPermissions(::java::security::CodeSource *) = 0;
  virtual ::java::security::PermissionCollection * getPermissions(::java::security::ProtectionDomain *);
  virtual jboolean implies(::java::security::ProtectionDomain *, ::java::security::Permission *);
  virtual void refresh() = 0;
private:
  static ::java::security::Policy * currentPolicy;
  ::java::util::Map * __attribute__((aligned(__alignof__( ::java::lang::Object)))) pd2pc;
public:
  static ::java::lang::Class class$;
};

#endif // __java_security_Policy__
