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

#ifndef __gnu_javax_crypto_keyring_BaseKeyring__
#define __gnu_javax_crypto_keyring_BaseKeyring__

#pragma interface

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

extern "Java"
{
  namespace gnu
  {
    namespace javax
    {
      namespace crypto
      {
        namespace keyring
        {
            class BaseKeyring;
            class CompressedEntry;
            class Entry;
            class PasswordAuthenticatedEntry;
        }
      }
    }
  }
}

class gnu::javax::crypto::keyring::BaseKeyring : public ::java::lang::Object
{

public:
  BaseKeyring();
  virtual void load(::java::util::Map *);
  virtual void store(::java::util::Map *);
  virtual void reset();
  virtual jint size();
  virtual ::java::util::Enumeration * aliases();
  virtual jboolean containsAlias(::java::lang::String *);
  virtual ::java::util::List * get(::java::lang::String *);
  virtual void add(::gnu::javax::crypto::keyring::Entry *);
  virtual void remove(::java::lang::String *);
public: // actually protected
  virtual ::java::lang::String * fixAlias(::java::lang::String *);
  virtual void load(::java::io::InputStream *, JArray< jchar > *) = 0;
  virtual void store(::java::io::OutputStream *, JArray< jchar > *) = 0;
  ::gnu::javax::crypto::keyring::PasswordAuthenticatedEntry * __attribute__((aligned(__alignof__( ::java::lang::Object)))) keyring;
  ::gnu::javax::crypto::keyring::CompressedEntry * keyring2;
public:
  static ::java::lang::Class class$;
};

#endif // __gnu_javax_crypto_keyring_BaseKeyring__
