File: delayer.rbs

package info (click to toggle)
ruby-delayer 1.2.1-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 192 kB
  • sloc: ruby: 947; makefile: 3; sh: 2
file content (150 lines) | stat: -rw-r--r-- 4,019 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
# TypeProf 0.13.0

# Classes
module Delayer
  type clock = Float | Integer | Rational

  VERSION: String
  extend Extend
  extend Delayer
  self.@expire: clock
  self.@priorities: Array[Symbol]
  self.@default_priority: Symbol
  self.@default: singleton(Delayer)
  @procedure: Procedure | DelayedProcedure
  self.@busy: bool
  self.@remain_hook: ^() -> void
  self.@exception: Exception?
  self.@remain_received: bool
  self.@lock: Monitor
  self.@bucket: Bucket
  self.@last_reserve: nil
  self.@reserves: untyped
  @default_priority: Symbol
  self.@end_time: clock?

  class GeneratedDelayerAbstract
    include ::Delayer
  end

  def self.generate_class: (?Hash[Symbol,Integer|Symbol|Enumerable[Symbol]] options) -> singleton(Delayer)
  def self.method_missing: (Symbol, *untyped, **untyped) { (*untyped) -> untyped } -> untyped

  def self.StateError: (:cancel) -> singleton(AlreadyCanceledError)
                     | (:done) -> singleton(AlreadyExecutedError)
                     | (:run) -> singleton(AlreadyRunningError)
                     | (Symbol) -> singleton(TooLate)

  attr_reader priority: Symbol
  def self.included: (singleton(Delayer) klass) -> void
  def initialize: (?untyped priority, *untyped _args, ?delay: Time | clock) -> void
  def cancel: -> Delayer
  def stash_size: -> (Integer)
  def __send__: (Symbol, *untyped, **untyped) { (untyped) -> untyped } -> untyped

  class DelayedProcedure
    include Comparable
    @proc: (^() -> void)
    @cancel: bool
    @procedure: Procedure?

    attr_reader state: untyped
    attr_reader delayer: Delayer
    attr_reader reserve_at: clock
    def initialize: (Delayer delayer, delay: Time | clock) { () -> void } -> void
    def register: -> self
    def <=>: (DelayedProcedure other) -> Integer?
    def cancel: -> self
    def canceled?: -> bool
  end

  class Error < StandardError
  end

  class TooLate < Error
  end

  class AlreadyExecutedError < TooLate
  end

  class AlreadyCanceledError < TooLate
  end

  class AlreadyRunningError < TooLate
  end

  class InvalidPriorityError < Error
  end

  class RecursiveError < Error
  end

  class NoLowerLevelError < RecursiveError
  end

  class RemainJobsError < RecursiveError
  end

  class Bucket
    attr_accessor first(): Procedure?
    attr_accessor last(): Procedure?
    attr_accessor priority_of(): Hash[Symbol, Procedure?]
    attr_accessor stashed(): Bucket?

    def initialize: (Procedure?,Procedure?,Hash[Symbol, Procedure],Bucket?) -> void
    def stash_size: () -> Integer
  end

  module Extend
    @last_reserve: untyped
    @lock: Monitor
    @end_time: clock?
    @bucket: Bucket
    @remain_hook: ^() -> void
    @remain_received: bool
    @busy: bool
    @priorities: Array[Symbol]
    @reserves: Set[DelayedProcedure]

    attr_accessor expire: clock
    attr_reader exception: Exception?
    def self.extended: (singleton(Delayer) klass) -> singleton(Delayer)
    def pop_reserve: (?clock start_time) -> nil
    def run: (?clock? current_expire) -> void
    def expire?: -> bool
    def run_once: -> void

    private
    def run_once_without_pop_reserve: -> void

    public
    def busy?: -> bool
    def empty?: -> bool
    def size: (?Delayer::Procedure? node) -> Integer
    def register: (untyped procedure) -> Extend
    def reserve: (untyped procedure) -> Extend
    def register_remain_hook: () { () -> void } -> void
    def get_prev_point: (Symbol) -> ::Delayer::Procedure?
    def validate_priority: (Symbol) -> void
    def stash_enter!: -> Extend
    def stash_exit!: -> Bucket?
    def stash_level: -> untyped

    private
    def forward: -> Procedure?
    def lock: -> Monitor
  end

  class Procedure
    @proc: (^() -> void)?

    attr_reader state: :cancel | :done | :run | :stop
    attr_reader delayer: untyped
    attr_accessor next: Delayer::Procedure?
    def initialize: (Delayer delayer) { () -> void } -> void
    def run: -> void
    def cancel: -> Procedure
    def canceled?: -> bool
    def break: (untyped node) -> untyped
  end
end