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

#ifndef __gnu_java_security_der_BitString__
#define __gnu_java_security_der_BitString__

#pragma interface

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

extern "Java"
{
  namespace gnu
  {
    namespace java
    {
      namespace security
      {
        namespace der
        {
            class BitString;
        }
      }
    }
  }
}

class gnu::java::security::der::BitString : public ::java::lang::Object
{

public:
  BitString(JArray< jbyte > *, jint, jboolean);
  BitString(JArray< jbyte > *, jint, jint, jint, jboolean);
  BitString(JArray< jbyte > *, jint, jint, jint);
  BitString(JArray< jbyte > *, jint);
  BitString(JArray< jbyte > *, jint, jint);
  BitString(JArray< jbyte > *);
  virtual JArray< jbyte > * toByteArray();
  virtual JArray< jbyte > * getShiftedByteArray();
  virtual jint getIgnoredBits();
  virtual jint size();
  virtual JArray< jboolean > * toBooleanArray();
  virtual ::java::lang::Object * clone();
  virtual jint compareTo(::java::lang::Object *);
  virtual jint hashCode();
  virtual jboolean equals(::java::lang::Object *);
  virtual ::java::lang::String * toString();
private:
  JArray< jbyte > * __attribute__((aligned(__alignof__( ::java::lang::Object)))) bytes;
  JArray< jbyte > * externBytes;
  jint ignoredBits;
  JArray< jboolean > * boolVal;
public:
  static ::java::lang::Class class$;
};

#endif // __gnu_java_security_der_BitString__
