2023-03-30 15:04:25 -07:00
|
|
|
# typed: true
|
2019-04-19 15:38:03 +09:00
|
|
|
# frozen_string_literal: true
|
|
|
|
|
2016-08-18 22:11:42 +03:00
|
|
|
class IO
|
|
|
|
def readline_nonblock(sep = $INPUT_RECORD_SEPARATOR)
|
2019-04-18 17:33:02 +09:00
|
|
|
line = +""
|
|
|
|
buffer = +""
|
2017-04-20 04:47:03 +02:00
|
|
|
|
2023-03-30 15:04:25 -07:00
|
|
|
begin
|
|
|
|
loop do
|
|
|
|
break if buffer == sep
|
2018-09-17 02:45:00 +02:00
|
|
|
|
2023-03-30 15:04:25 -07:00
|
|
|
read_nonblock(1, buffer)
|
|
|
|
line.concat(buffer)
|
|
|
|
end
|
2017-04-20 04:47:03 +02:00
|
|
|
|
2023-03-30 15:04:25 -07:00
|
|
|
line.freeze
|
|
|
|
rescue IO::WaitReadable, EOFError
|
|
|
|
raise if line.empty?
|
2018-09-17 02:45:00 +02:00
|
|
|
|
2023-03-30 15:04:25 -07:00
|
|
|
line.freeze
|
|
|
|
end
|
2016-08-18 22:11:42 +03:00
|
|
|
end
|
|
|
|
end
|