diff options
Diffstat (limited to 'lib/evendoors/twirl.rb')
-rw-r--r-- | lib/evendoors/twirl.rb | 59 |
1 files changed, 59 insertions, 0 deletions
diff --git a/lib/evendoors/twirl.rb b/lib/evendoors/twirl.rb new file mode 100644 index 0000000..30ef169 --- /dev/null +++ b/lib/evendoors/twirl.rb @@ -0,0 +1,59 @@ +#! /usr/bin/env ruby +# -*- coding: UTF-8 -*- + +# +module EvenDoors + # + class Twirl + # + @debug = false + @pool = {} # per particle class free list + @sys_fifo = [] # system particles fifo list + @app_fifo = [] # application particles fifo list + # + # + class << self + # + attr_accessor :debug + # + def release_p p + ( @pool[p.class] ||= [] ) << p + end + # + def require_p p_kls + l = @pool[p_kls] + return p_kls.new if l.nil? + p = l.pop + return p_kls.new if p.nil? + p.reset! + p + end + # + def send_p p + @app_fifo << p + end + # + def send_sys_p p + @sys_fifo << p + end + # + def twirl! + while @sys_fifo.length>0 or @app_fifo.length>0 + while @sys_fifo.length>0 + p = @sys_fifo.shift + p.door.process_sys p + end + while @app_fifo.length>0 + p = @app_fifo.shift + p.door.process p + end + end + end + # + end + # + end + # +end +# +# EOF |