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

#ifndef __gnu_java_security_jce_hash_MessageDigestAdapter__
#define __gnu_java_security_jce_hash_MessageDigestAdapter__

#pragma interface

#include <java/security/MessageDigestSpi.h>
#include <gcj/array.h>

extern "Java"
{
  namespace gnu
  {
    namespace java
    {
      namespace security
      {
        namespace hash
        {
            class IMessageDigest;
        }
        namespace jce
        {
          namespace hash
          {
              class MessageDigestAdapter;
          }
        }
      }
    }
  }
}

class gnu::java::security::jce::hash::MessageDigestAdapter : public ::java::security::MessageDigestSpi
{

public: // actually protected
  MessageDigestAdapter(::java::lang::String *);
private:
  MessageDigestAdapter(::gnu::java::security::hash::IMessageDigest *);
public:
  virtual ::java::lang::Object * clone();
  virtual jint engineGetDigestLength();
  virtual void engineUpdate(jbyte);
  virtual void engineUpdate(JArray< jbyte > *, jint, jint);
  virtual JArray< jbyte > * engineDigest();
  virtual jint engineDigest(JArray< jbyte > *, jint, jint);
  virtual void engineReset();
private:
  ::gnu::java::security::hash::IMessageDigest * __attribute__((aligned(__alignof__( ::java::security::MessageDigestSpi)))) adaptee;
public:
  static ::java::lang::Class class$;
};

#endif // __gnu_java_security_jce_hash_MessageDigestAdapter__
