FOREIGN MODULE java_nio_channels_spi;

IMPORT
    sun_nio_ch := "sun.nio.ch",
    java_lang := "java.lang",
    java_nio_channels := "java.nio.channels",
    java_util_concurrent_atomic := "java.util.concurrent.atomic",
    java_util := "java.util",
    java_security := "java.security";

TYPE

  AbstractInterruptibleChannel* = POINTER TO ABSTRACT RECORD (java_lang.Object + java_nio_channels.Channel + java_nio_channels.InterruptibleChannel)    (* Typebound Procedures *)
                                  STATIC
                                    PROCEDURE Init!() : AbstractInterruptibleChannel,CONSTRUCTOR;
                                  END;

  AbstractSelectableChannel* = POINTER TO ABSTRACT RECORD (java_nio_channels.SelectableChannel)    (* Typebound Procedures *)
                               STATIC
                                 PROCEDURE Init!(p0 : SelectorProvider) : AbstractSelectableChannel,CONSTRUCTOR;
                               END;

  AbstractSelectionKey* = POINTER TO ABSTRACT RECORD (java_nio_channels.SelectionKey)    (* Typebound Procedures *)
                          STATIC
                            PROCEDURE Init!() : AbstractSelectionKey,CONSTRUCTOR;
                          END;

  AbstractSelector* = POINTER TO ABSTRACT RECORD (java_nio_channels.Selector)    (* Typebound Procedures *)
                      STATIC
                        PROCEDURE Init!(p0 : SelectorProvider) : AbstractSelector,CONSTRUCTOR;
                      END;

  SelectorProvider* = POINTER TO ABSTRACT RECORD (java_lang.Object)    (* Typebound Procedures *)
                      STATIC
                        PROCEDURE Init!() : SelectorProvider,CONSTRUCTOR;
                        PROCEDURE provider*() : SelectorProvider;
                      END;




PROCEDURE (self:AbstractInterruptibleChannel) begin!(),NEW;

PROCEDURE (self:AbstractInterruptibleChannel) close*(),NEW;

PROCEDURE (self:AbstractInterruptibleChannel) end!(p0 : BOOLEAN),NEW;

PROCEDURE (self:AbstractInterruptibleChannel) implCloseChannel!(),NEW,ABSTRACT;

PROCEDURE (self:AbstractInterruptibleChannel) isOpen*() : BOOLEAN,NEW;

PROCEDURE (self:AbstractSelectableChannel) blockingLock*() : java_lang.Object;

PROCEDURE (self:AbstractSelectableChannel) configureBlocking*(p0 : BOOLEAN) : java_nio_channels.SelectableChannel;

PROCEDURE (self:AbstractSelectableChannel) implCloseChannel!();

PROCEDURE (self:AbstractSelectableChannel) implCloseSelectableChannel!(),NEW,ABSTRACT;

PROCEDURE (self:AbstractSelectableChannel) implConfigureBlocking!(p0 : BOOLEAN),NEW,ABSTRACT;

PROCEDURE (self:AbstractSelectableChannel) isBlocking*() : BOOLEAN;

PROCEDURE (self:AbstractSelectableChannel) isRegistered*() : BOOLEAN;

PROCEDURE (self:AbstractSelectableChannel) keyFor*(p0 : java_nio_channels.Selector) : java_nio_channels.SelectionKey;

PROCEDURE (self:AbstractSelectableChannel) provider*() : SelectorProvider;

PROCEDURE (self:AbstractSelectableChannel) register*(p0 : java_nio_channels.Selector;
                                                     p1 : INTEGER;
                                                     p2 : java_lang.Object) : java_nio_channels.SelectionKey;

PROCEDURE (self:AbstractSelectionKey) cancel*();

PROCEDURE (self:AbstractSelectionKey) isValid*() : BOOLEAN;

PROCEDURE (self:AbstractSelector) begin!(),NEW;

PROCEDURE (self:AbstractSelector) cancelledKeys!() : java_util.Set,NEW;

PROCEDURE (self:AbstractSelector) close*();

PROCEDURE (self:AbstractSelector) deregister!(p0 : AbstractSelectionKey),NEW;

PROCEDURE (self:AbstractSelector) end!(),NEW;

PROCEDURE (self:AbstractSelector) implCloseSelector!(),NEW,ABSTRACT;

PROCEDURE (self:AbstractSelector) isOpen*() : BOOLEAN;

PROCEDURE (self:AbstractSelector) provider*() : SelectorProvider;

PROCEDURE (self:AbstractSelector) register!(p0 : AbstractSelectableChannel;
                                            p1 : INTEGER;
                                            p2 : java_lang.Object) : java_nio_channels.SelectionKey,NEW,ABSTRACT;

PROCEDURE (self:SelectorProvider) inheritedChannel*() : java_nio_channels.Channel,NEW,EXTENSIBLE;

PROCEDURE (self:SelectorProvider) openDatagramChannel*() : java_nio_channels.DatagramChannel,NEW,ABSTRACT;

PROCEDURE (self:SelectorProvider) openPipe*() : java_nio_channels.Pipe,NEW,ABSTRACT;

PROCEDURE (self:SelectorProvider) openSelector*() : AbstractSelector,NEW,ABSTRACT;

PROCEDURE (self:SelectorProvider) openServerSocketChannel*() : java_nio_channels.ServerSocketChannel,NEW,ABSTRACT;

PROCEDURE (self:SelectorProvider) openSocketChannel*() : java_nio_channels.SocketChannel,NEW,ABSTRACT;

END java_nio_channels_spi.