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

#ifndef __java_nio_channels_spi_SelectorProvider__
#define __java_nio_channels_spi_SelectorProvider__

#pragma interface

#include <java/lang/Object.h>
extern "Java"
{
  namespace java
  {
    namespace nio
    {
      namespace channels
      {
          class Channel;
          class DatagramChannel;
          class Pipe;
          class ServerSocketChannel;
          class SocketChannel;
        namespace spi
        {
            class AbstractSelector;
            class SelectorProvider;
        }
      }
    }
  }
}

class java::nio::channels::spi::SelectorProvider : public ::java::lang::Object
{

public: // actually protected
  SelectorProvider();
public:
  virtual ::java::nio::channels::DatagramChannel * openDatagramChannel() = 0;
  virtual ::java::nio::channels::Pipe * openPipe() = 0;
  virtual ::java::nio::channels::spi::AbstractSelector * openSelector() = 0;
  virtual ::java::nio::channels::ServerSocketChannel * openServerSocketChannel() = 0;
  virtual ::java::nio::channels::SocketChannel * openSocketChannel() = 0;
  virtual ::java::nio::channels::Channel * inheritedChannel();
  static ::java::nio::channels::spi::SelectorProvider * provider();
private:
  static ::java::nio::channels::spi::SelectorProvider * systemDefaultProvider;
public:
  static ::java::lang::Class class$;
};

#endif // __java_nio_channels_spi_SelectorProvider__
