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

#ifndef __org_omg_CORBA_StringValueHelper__
#define __org_omg_CORBA_StringValueHelper__

#pragma interface

#include <java/lang/Object.h>
extern "Java"
{
  namespace org
  {
    namespace omg
    {
      namespace CORBA
      {
          class Any;
          class StringValueHelper;
          class TypeCode;
        namespace portable
        {
            class InputStream;
            class OutputStream;
        }
      }
    }
  }
}

class org::omg::CORBA::StringValueHelper : public ::java::lang::Object
{

public:
  StringValueHelper();
  virtual ::java::lang::String * get_id();
  static ::java::lang::String * id();
  virtual ::java::io::Serializable * read_value(::org::omg::CORBA::portable::InputStream *);
  virtual void write_value(::org::omg::CORBA::portable::OutputStream *, ::java::io::Serializable *);
  static ::java::lang::String * extract(::org::omg::CORBA::Any *);
  static void insert(::org::omg::CORBA::Any *, ::java::lang::String *);
  static ::java::lang::String * read(::org::omg::CORBA::portable::InputStream *);
  static ::org::omg::CORBA::TypeCode * type();
  static void write(::org::omg::CORBA::portable::OutputStream *, ::java::lang::String *);
private:
  static ::java::lang::String * id__;
  static ::org::omg::CORBA::TypeCode * tString;
public:
  static ::java::lang::Class class$;
};

#endif // __org_omg_CORBA_StringValueHelper__
