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

#ifndef __java_security_AccessControlContext__
#define __java_security_AccessControlContext__

#pragma interface

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

extern "Java"
{
  namespace java
  {
    namespace security
    {
        class AccessControlContext;
        class DomainCombiner;
        class Permission;
        class ProtectionDomain;
    }
  }
}

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

public:
  AccessControlContext(JArray< ::java::security::ProtectionDomain * > *);
  AccessControlContext(::java::security::AccessControlContext *, ::java::security::DomainCombiner *);
public: // actually package-private
  AccessControlContext(JArray< ::java::security::ProtectionDomain * > *, ::java::security::AccessControlContext *, ::java::security::DomainCombiner *);
public:
  ::java::security::DomainCombiner * getDomainCombiner();
  void checkPermission(::java::security::Permission *);
  jboolean equals(::java::lang::Object *);
  jint hashCode();
public: // actually package-private
  JArray< ::java::security::ProtectionDomain * > * getProtectionDomains();
private:
  JArray< ::java::security::ProtectionDomain * > * __attribute__((aligned(__alignof__( ::java::lang::Object)))) protectionDomains;
  ::java::security::DomainCombiner * combiner;
public:
  static ::java::lang::Class class$;
};

#endif // __java_security_AccessControlContext__
