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

#ifndef __gnu_java_nio_NIOSocket__
#define __gnu_java_nio_NIOSocket__

#pragma interface

#include <java/net/Socket.h>
extern "Java"
{
  namespace gnu
  {
    namespace java
    {
      namespace net
      {
          class PlainSocketImpl;
      }
      namespace nio
      {
          class NIOSocket;
          class SocketChannelImpl;
      }
    }
  }
  namespace java
  {
    namespace nio
    {
      namespace channels
      {
          class SocketChannel;
      }
    }
  }
}

class gnu::java::nio::NIOSocket : public ::java::net::Socket
{

public: // actually protected
  NIOSocket(::gnu::java::net::PlainSocketImpl *, ::gnu::java::nio::SocketChannelImpl *);
public:
  ::gnu::java::net::PlainSocketImpl * getPlainSocketImpl();
public: // actually package-private
  void setChannel(::gnu::java::nio::SocketChannelImpl *);
public:
  ::java::nio::channels::SocketChannel * getChannel();
private:
  ::gnu::java::net::PlainSocketImpl * __attribute__((aligned(__alignof__( ::java::net::Socket)))) impl;
  ::gnu::java::nio::SocketChannelImpl * channel;
public:
  static ::java::lang::Class class$;
};

#endif // __gnu_java_nio_NIOSocket__
