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

#ifndef __gnu_classpath_jdwp_value_Value__
#define __gnu_classpath_jdwp_value_Value__

#pragma interface

#include <java/lang/Object.h>
extern "Java"
{
  namespace gnu
  {
    namespace classpath
    {
      namespace jdwp
      {
        namespace value
        {
            class Value;
        }
      }
    }
  }
  namespace java
  {
    namespace nio
    {
        class ByteBuffer;
    }
  }
}

class gnu::classpath::jdwp::value::Value : public ::java::lang::Object
{

public: // actually protected
  Value(jbyte);
public:
  virtual jbyte getTag();
  virtual void writeUntagged(::java::io::DataOutputStream *);
  virtual void writeTagged(::java::io::DataOutputStream *);
public: // actually protected
  virtual void write(::java::io::DataOutputStream *) = 0;
  virtual ::java::lang::Object * getObject() = 0;
public:
  static ::java::lang::Object * getUntaggedObject(::java::nio::ByteBuffer *, ::java::lang::Class *);
  static ::java::lang::Object * getTaggedObject(::java::nio::ByteBuffer *);
private:
  jbyte __attribute__((aligned(__alignof__( ::java::lang::Object)))) _tag;
public:
  static ::java::lang::Class class$;
};

#endif // __gnu_classpath_jdwp_value_Value__
