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

#ifndef __gnu_CORBA_Interceptor_gnuIcCurrent__
#define __gnu_CORBA_Interceptor_gnuIcCurrent__

#pragma interface

#include <org/omg/CORBA/portable/ObjectImpl.h>
#include <gcj/array.h>

extern "Java"
{
  namespace gnu
  {
    namespace CORBA
    {
      namespace Interceptor
      {
          class gnuIcCurrent;
      }
      namespace Poa
      {
          class ORB_1_4;
      }
    }
  }
  namespace org
  {
    namespace omg
    {
      namespace CORBA
      {
          class Any;
      }
    }
  }
}

class gnu::CORBA::Interceptor::gnuIcCurrent : public ::org::omg::CORBA::portable::ObjectImpl
{

public:
  gnuIcCurrent(::gnu::CORBA::Poa::ORB_1_4 *);
  virtual JArray< ::java::lang::String * > * _ids();
  virtual void put(::java::lang::Thread *, JArray< ::org::omg::CORBA::Any * > *);
  virtual jboolean has(::java::lang::Thread *);
  virtual void remove(::java::lang::Thread *);
public: // actually package-private
  virtual JArray< ::org::omg::CORBA::Any * > * get_slots();
public:
  virtual JArray< ::org::omg::CORBA::Any * > * clone_slots();
  virtual ::org::omg::CORBA::Any * get_slot(jint);
  virtual void set_slot(jint, ::org::omg::CORBA::Any *);
private:
  static const jlong serialVersionUID = 1LL;
public: // actually package-private
  ::gnu::CORBA::Poa::ORB_1_4 * __attribute__((aligned(__alignof__( ::org::omg::CORBA::portable::ObjectImpl)))) orb;
private:
  ::java::util::Hashtable * threads;
public: // actually package-private
  static JArray< ::org::omg::CORBA::Any * > * NO_SLOTS;
public:
  static ::java::lang::Class class$;
};

#endif // __gnu_CORBA_Interceptor_gnuIcCurrent__
