File: //usr/local/rvm/gems/ruby-3.0.2/doc/nio4r-2.5.8/ri/ext/nio4r/org/nio4r/page-Nio4r_java.ri
U:RDoc::TopLevel[ i I"#ext/nio4r/org/nio4r/Nio4r.java:ETcRDoc::Parser::Simpleo:RDoc::Markup::Document:@parts[o:RDoc::Markup::Paragraph;[I"package org.nio4r;;To:RDoc::Markup::BlankLine o; ;[I"1import java.nio.channels.SelectableChannel; ;TI",import java.nio.channels.SelectionKey; ;TI",import java.nio.channels.SocketChannel;;T@o; ;[I"import org.jruby.Ruby; ;TI"!import org.jruby.RubyClass; ;TI""import org.jruby.RubyModule; ;TI"/import org.jruby.runtime.ObjectAllocator; ;TI",import org.jruby.runtime.load.Library; ;TI"2import org.jruby.runtime.builtin.IRubyObject;;T@o; ;[I""import org.nio4r.ByteBuffer; ;TI"import org.nio4r.Monitor; ;TI"import org.nio4r.Selector;;T@o; ;[I",public class Nio4r implements Library {;To:RDoc::Markup::Verbatim;[ZI"private Ruby ruby;
;TI"
;TI"6public void load(final Ruby ruby, boolean bln) {
;TI" this.ruby = ruby;
;TI"
;TI"4 RubyModule nio = ruby.defineModule("NIO");
;TI"
;TI"j RubyClass selector = ruby.defineClassUnder("Selector", ruby.getObject(), new ObjectAllocator() {
;TI"D public IRubyObject allocate(Ruby ruby, RubyClass rc) {
;TI"0 return new Selector(ruby, rc);
;TI" }
;TI" }, nio);
;TI"
;TI": selector.defineAnnotatedMethods(Selector.class);
;TI"
;TI"h RubyClass monitor = ruby.defineClassUnder("Monitor", ruby.getObject(), new ObjectAllocator() {
;TI"D public IRubyObject allocate(Ruby ruby, RubyClass rc) {
;TI"/ return new Monitor(ruby, rc);
;TI" }
;TI" }, nio);
;TI"
;TI"8 monitor.defineAnnotatedMethods(Monitor.class);
;TI"
;TI"n RubyClass byteBuffer = ruby.defineClassUnder("ByteBuffer", ruby.getObject(), new ObjectAllocator() {
;TI"D public IRubyObject allocate(Ruby ruby, RubyClass rc) {
;TI"2 return new ByteBuffer(ruby, rc);
;TI" }
;TI" }, nio);
;TI"
;TI"> byteBuffer.defineAnnotatedMethods(ByteBuffer.class);
;TI"9 byteBuffer.includeModule(ruby.getEnumerable());
;TI"
;TI"s ruby.defineClassUnder("OverflowError", ruby.getIOError(), ruby.getIOError().getAllocator(), byteBuffer);
;TI"s ruby.defineClassUnder("UnderflowError", ruby.getIOError(), ruby.getIOError().getAllocator(), byteBuffer);
;TI"s ruby.defineClassUnder("MarkUnsetError", ruby.getIOError(), ruby.getIOError().getAllocator(), byteBuffer);
;TI"}
;TI"
;TI"ipublic static int symbolToInterestOps(Ruby ruby, SelectableChannel channel, IRubyObject interest) {
;TI"/ if(interest == ruby.newSymbol("r")) {
;TI"F if((channel.validOps() & SelectionKey.OP_ACCEPT) != 0) {
;TI". return SelectionKey.OP_ACCEPT;
;TI" } else {
;TI", return SelectionKey.OP_READ;
;TI" }
;TI"6 } else if(interest == ruby.newSymbol("w")) {
;TI"_ if(channel instanceof SocketChannel && !((SocketChannel)channel).isConnected()) {
;TI"1 return SelectionKey.OP_CONNECT;
;TI" } else {
;TI"/ return SelectionKey.OP_WRITE;
;TI" }
;TI"7 } else if(interest == ruby.newSymbol("rw")) {
;TI"" int interestOps = 0;
;TI"
;TI"Z /* nio4r emulates the POSIX behavior, which is sloppy about allowed modes */
;TI"_ if((channel.validOps() & (SelectionKey.OP_READ | SelectionKey.OP_ACCEPT)) != 0) {
;TI"Y interestOps |= symbolToInterestOps(ruby, channel, ruby.newSymbol("r"));
;TI" }
;TI"
;TI"a if((channel.validOps() & (SelectionKey.OP_WRITE | SelectionKey.OP_CONNECT)) != 0) {
;TI"Y interestOps |= symbolToInterestOps(ruby, channel, ruby.newSymbol("w"));
;TI" }
;TI"
;TI"! return interestOps;
;TI" } else {
;TI"P throw ruby.newArgumentError("invalid interest type: " + interest);
;TI" }
;TI"}
;TI"
;TI"Qpublic static IRubyObject interestOpsToSymbol(Ruby ruby, int interestOps) {
;TI" switch(interestOps) {
;TI"( case SelectionKey.OP_READ:
;TI"* case SelectionKey.OP_ACCEPT:
;TI"- return ruby.newSymbol("r");
;TI") case SelectionKey.OP_WRITE:
;TI"+ case SelectionKey.OP_CONNECT:
;TI"- return ruby.newSymbol("w");
;TI"B case SelectionKey.OP_READ | SelectionKey.OP_CONNECT:
;TI"@ case SelectionKey.OP_READ | SelectionKey.OP_WRITE:
;TI". return ruby.newSymbol("rw");
;TI" case 0:
;TI"' return ruby.getNil();
;TI" default:
;TI"Q throw ruby.newArgumentError("unknown interest op combination");
;TI" }
;TI"}
;T:@format0o; ;[I"};T:
@file@:0@omit_headings_from_table_of_contents_below0