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

#ifndef __gnu_java_beans_encoder_ScannerState__
#define __gnu_java_beans_encoder_ScannerState__

#pragma interface

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

extern "Java"
{
  namespace gnu
  {
    namespace java
    {
      namespace beans
      {
        namespace encoder
        {
            class Context;
            class ObjectId;
            class ScannerState;
        }
      }
    }
  }
}

class gnu::java::beans::encoder::ScannerState : public ::java::lang::Object
{

public:
  ScannerState();
public: // actually package-private
  virtual void init(::java::lang::String *);
  virtual ::java::lang::String * getName();
  virtual void enter(::gnu::java::beans::encoder::Context *);
public: // actually protected
  virtual void enterImpl(::gnu::java::beans::encoder::Context *);
public: // actually package-private
  virtual ::gnu::java::beans::encoder::Context * context();
  virtual jint getCalls();
  virtual void putSuccessor(jint, ::java::lang::String *);
  virtual ::java::lang::String * getSuccessor(jint);
  virtual void setDefaultSuccessor(::java::lang::String *);
  virtual void methodInvocation(::java::lang::String *) = 0;
  virtual void staticMethodInvocation(::java::lang::String *, ::java::lang::String *) = 0;
  virtual void staticFieldAccess(::java::lang::String *, ::java::lang::String *) = 0;
  virtual void classResolution(::java::lang::String *) = 0;
  virtual void objectInstantiation(::java::lang::String *, ::gnu::java::beans::encoder::ObjectId *) = 0;
  virtual void primitiveInstantiation(::java::lang::String *, ::java::lang::String *) = 0;
  virtual void objectArrayInstantiation(::java::lang::String *, ::java::lang::String *, ::gnu::java::beans::encoder::ObjectId *) = 0;
  virtual void primitiveArrayInstantiation(::java::lang::String *, ::java::lang::String *, ::gnu::java::beans::encoder::ObjectId *) = 0;
  virtual void arraySet(::java::lang::String *) = 0;
  virtual void arrayGet(::java::lang::String *) = 0;
  virtual void listGet() = 0;
  virtual void listSet() = 0;
  virtual void nullObject() = 0;
  virtual void stringReference(::java::lang::String *) = 0;
  virtual void objectReference(::gnu::java::beans::encoder::ObjectId *) = 0;
  virtual void end() = 0;
  virtual void enter();
  static const jint TRANSITION_METHOD_INVOCATION = 0;
  static const jint TRANSITION_STATIC_METHOD_INVOCATION = 1;
  static const jint TRANSITION_STATIC_FIELD_ACCESS = 2;
  static const jint TRANSITION_CLASS_RESOLUTION = 3;
  static const jint TRANSITION_OBJECT_INSTANTIATION = 4;
  static const jint TRANSITION_PRIMITIVE_INSTANTIATION = 5;
  static const jint TRANSITION_OBJECT_ARRAY_INSTANTIATION = 6;
  static const jint TRANSITION_PRIMITIVE_ARRAY_INSTANTIATION = 7;
  static const jint TRANSITION_ARRAY_SET = 8;
  static const jint TRANSITION_ARRAY_GET = 9;
  static const jint TRANSITION_LIST_SET = 10;
  static const jint TRANSITION_LIST_GET = 11;
  static const jint TRANSITION_NULL_OBJECT = 12;
  static const jint TRANSITION_STRING_REFERENCE = 13;
  static const jint TRANSITION_OBJECT_REFERENCE = 14;
  static const jint TRANSITION_FIRST = 0;
  static const jint TRANSITION_LAST = 14;
  static ::java::lang::String * DEFAULT_STATE_NAME;
  ::java::lang::String * __attribute__((aligned(__alignof__( ::java::lang::Object)))) defaultSuccessor;
  static JArray< ::java::lang::String * > * transitionNames;
  ::java::util::HashMap * transitions;
  jint calls;
  ::gnu::java::beans::encoder::Context * context__;
  ::java::lang::String * name;
  static jboolean $assertionsDisabled;
public:
  static ::java::lang::Class class$;
};

#endif // __gnu_java_beans_encoder_ScannerState__
