]>
Commit | Line | Data |
---|---|---|
7a1b7702 I |
1 | class Buffer |
2 | def initialize(size) | |
3 | @size = size | |
4 | @buff = [] | |
5 | @buff_type = [] | |
6 | @current = 0 | |
7 | @wrap = false | |
8 | @before = false | |
9 | @after = false | |
10 | end | |
11 | def size() | |
12 | return @buff.length | |
13 | end | |
14 | def maxlen() | |
15 | maxlen = 0 | |
16 | @buff.each do |string| | |
17 | if string.length > maxlen | |
18 | maxlen = string.length | |
19 | end | |
20 | end | |
21 | return maxlen | |
22 | end | |
23 | ||
24 | def push(string,type=0) | |
25 | if(string.chomp.empty?) then string = " " end | |
26 | string.split( /\r?\n/ ).each do |line| | |
27 | @buff[@current] = line | |
28 | @buff_type[@current] = type | |
29 | if(@size > 0) | |
30 | @current = (1+@current) % @size | |
31 | else | |
32 | @current = 1+@current | |
33 | end | |
34 | if(@current == 0) then @wrap = true end | |
35 | end | |
36 | end | |
37 | def yield(size,offset=0,&block) | |
38 | if(size < 0) then size = 0 end | |
39 | range = Range.new(0,@current-1).to_a | |
40 | if(@wrap) | |
41 | range = Range.new(@current,@size-1).to_a + range | |
42 | end | |
43 | range = range.last(size+offset)[0,size] | |
44 | @before = (size+offset < @buff.length) | |
45 | @after = (offset != 0 and size < @buff.length) | |
46 | if(block) | |
47 | range.each do |i| | |
48 | yield [@buff[i],@buff_type[i]] | |
49 | end | |
50 | else | |
51 | return range.collect{|r| [@buff[r],@buff_type[r]]} | |
52 | end | |
53 | end | |
54 | def has_after?() | |
55 | return @after | |
56 | end | |
57 | def has_before?() | |
58 | return @before | |
59 | end | |
60 | def clear() | |
61 | @current = 0 | |
62 | @buff = [] | |
63 | @buff_type = [] | |
64 | end | |
65 | end | |
66 | ||
67 |