sequence 0.2.3 → 0.2.4

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,4 +1,4 @@
1
- # Copyright (C) 2006 Caleb Clausen
1
+ # Copyright (C) 2006, 2011 Caleb Clausen
2
2
  # Distributed under the terms of Ruby's license.
3
3
  class Sequence
4
4
  module ArrayLike
@@ -1,5 +1,5 @@
1
1
  # $Id$
2
- # Copyright (C) 2006 Caleb Clausen
2
+ # Copyright (C) 2006, 2011 Caleb Clausen
3
3
  # Distributed under the terms of Ruby's license.
4
4
 
5
5
  require 'sequence'
@@ -1,51 +1,51 @@
1
1
  # $Id$
2
- # Copyright (C) 2006 Caleb Clausen
2
+ # Copyright (C) 2006, 2011 Caleb Clausen
3
3
  # Distributed under the terms of Ruby's license.
4
4
 
5
5
  require 'sequence'
6
6
 
7
7
  class Sequence
8
- # This Sequence class is used to represent a circular buffer. You can think of
9
- # this as having no beginning/end or the current location is always both at the
10
- # beginning/end. Because of the circular nature, the methods
11
- # #scan_until, #modify,
12
- # #each, #collect!, and #map!
13
- # are not defined.
14
- class Circular < Sequence
8
+ # This Sequence class is used to represent a circular buffer. You can think of
9
+ # this as having no beginning/end or the current location is always both at the
10
+ # beginning/end. Because of the circular nature, the methods
11
+ # #scan_until, #modify,
12
+ # #each, #collect!, and #map!
13
+ # are not defined.
14
+ class Circular < Sequence
15
15
  # Create a circular sequence from a normal finite one.
16
16
  def initialize(sequence,pos=sequence.pos)
17
- @seq = sequence
18
- @pos=pos
19
- @size=sequence.size
20
- extend sequence.like
21
-
22
- @seq.on_change_notify self
23
- end
24
-
25
- #the default _parse_slice_args isn't forgiving enough about large
17
+ @seq = sequence
18
+ @pos=pos
19
+ @size=sequence.size
20
+ extend sequence.like
21
+
22
+ @seq.on_change_notify self
23
+ end
24
+
25
+ #the default _parse_slice_args isn't forgiving enough about large
26
26
  #(positive or negative) indexes
27
27
  def _normalize_pos pos, size=nil
28
28
  pos
29
29
  end
30
-
30
+
31
31
  def change_notification(cu,first,oldsize,newsize)
32
32
  assert(cu.equal?( @seq ))
33
33
  @pos =_adjust_pos_on_change(@pos, first,oldsize,newsize)
34
34
  @size+=newsize-oldsize
35
35
  assert @size==@seq.size
36
- notify_change(self,first,oldsize,newsize)
36
+ notify_change(self,first,oldsize,newsize)
37
37
  end
38
-
38
+
39
39
  =begin
40
40
  def _adjust_delete(len=1,reverse=false)
41
- pos = _pos(false)
42
- ret = nil
43
- @positions.each { |p| ret = p.__send__(:_deletion,pos,len,reverse,ret) }
41
+ pos = _pos(false)
42
+ ret = nil
43
+ @positions.each { |p| ret = p.__send__(:_deletion,pos,len,reverse,ret) }
44
44
  end
45
45
  def _adjust_insert(len=1)
46
- pos = _pos(false)
47
- ret = nil
48
- @positions.each { |p| ret = p.__send__(:_insertion,pos,len,ret) }
46
+ pos = _pos(false)
47
+ ret = nil
48
+ @positions.each { |p| ret = p.__send__(:_insertion,pos,len,ret) }
49
49
  end
50
50
  =end
51
51
  attr_reader :pos,:size
@@ -59,7 +59,7 @@ class Circular < Sequence
59
59
  def new_data
60
60
  @seq.new_data
61
61
  end
62
- =begin **
62
+ =begin **
63
63
  def read1next
64
64
  v0 = @seq.read1next
65
65
  v0.nil? && @seq.move!(true) && (v0 = @seq.read1next)
@@ -186,21 +186,21 @@ class Circular < Sequence
186
186
  end
187
187
  alias end! begin!
188
188
  alias end begin
189
- # Compare to +other+.
189
+ # Compare to +other+.
190
190
  def <=>(other)
191
- position?(other) and pos<=>other.pos
191
+ position?(other) and pos<=>other.pos
192
192
  end
193
193
 
194
194
  =begin ***
195
195
  # insert an element before the position and return self
196
196
  def << (value)
197
- insert1before(value)
198
- self
197
+ insert1before(value)
198
+ self
199
199
  end
200
200
  # insert an element after the position and return self
201
201
  def >> (value)
202
- insert1after(value)
203
- self
202
+ insert1after(value)
203
+ self
204
204
  end
205
205
  =end
206
206
  # :stopdoc:
@@ -208,27 +208,27 @@ class Circular < Sequence
208
208
  def data
209
209
  @seq
210
210
  end
211
-
211
+
212
212
  def each
213
213
  po=position
214
214
  yield read1 until self==position
215
215
  po.close
216
216
  end
217
-
217
+
218
218
  def eof?; false end
219
-
219
+
220
220
  def readahead(len)
221
221
  result=@seq[@pos%size,len]
222
222
  len-=result.size
223
223
  len.zero? and return result
224
224
  loops=len/size
225
-
225
+
226
226
  result+=@seq[0...size]*loops if loops.nonzero?
227
-
227
+
228
228
  len%=size
229
-
229
+
230
230
  len.zero? and return result
231
-
231
+
232
232
  result+=@seq[0,len]
233
233
  end
234
234
 
@@ -237,35 +237,35 @@ class Circular < Sequence
237
237
  move len
238
238
  result
239
239
  end
240
-
240
+
241
241
  def modify(*args)
242
242
  data=args.last
243
243
  first,len,only1=_parse_slice_args(*args[0...-1])
244
244
  first %= size
245
-
245
+
246
246
  len>size and raise( ArgumentError, "dst len too long")
247
247
  first+len>size and raise( ArgumentError, "wraparound modify in circular")
248
248
 
249
249
  @seq.modify(*args)
250
250
  end
251
-
251
+
252
252
  #when reversed and circular, always put the Circular outermost.
253
253
  def reverse
254
254
  Circular.new @seq.reverse
255
255
  end
256
-
257
- def nearbegin(len,at=pos)
256
+
257
+ def nearbegin(len,at=pos)
258
258
  false
259
259
  end
260
-
260
+
261
261
  def nearend(len,at=pos)
262
262
  false
263
263
  end
264
-
264
+
265
265
  def closed?
266
266
  super or @seq.closed?
267
267
  end
268
- end
268
+ end
269
269
  end
270
270
 
271
271
 
@@ -1,4 +1,4 @@
1
- # Copyright (C) 2006 Caleb Clausen
1
+ # Copyright (C) 2006, 2011 Caleb Clausen
2
2
  # Distributed under the terms of Ruby's license.
3
3
  require 'thread'
4
4
  require 'sequence/arraylike'
@@ -1,4 +1,4 @@
1
- # Copyright (C) 2006 Caleb Clausen
1
+ # Copyright (C) 2006, 2011 Caleb Clausen
2
2
  # Distributed under the terms of Ruby's license.
3
3
  # $Id$
4
4
 
@@ -163,10 +163,3 @@ class File
163
163
  Sequence::File.new(self)
164
164
  end
165
165
  end
166
-
167
- class StringIO
168
- # convert an StringIO to a seq
169
- def to_sequence
170
- Sequence::File.new(self)
171
- end
172
- end
@@ -1,4 +1,4 @@
1
- # Copyright (C) 2006 Caleb Clausen
1
+ # Copyright (C) 2006, 2011 Caleb Clausen
2
2
  # Distributed under the terms of Ruby's license.
3
3
 
4
4
  class Sequence
@@ -149,4 +149,4 @@ end
149
149
  class Proc
150
150
  has_side_effect *%w[[] call]
151
151
  no_side_effect "arity"
152
- end
152
+ end
@@ -1,4 +1,5 @@
1
1
  #!/usr/bin/env ruby
2
+ #Copyright (c) 2011 Caleb Clausen
2
3
  #--
3
4
  # $Idaemons: /home/cvs/rb/generator.rb,v 1.8 2001/10/03 08:54:32 knu Exp $
4
5
  # $RoughId: generator.rb,v 1.10 2003/10/14 19:36:58 knu Exp $
@@ -1,5 +1,5 @@
1
1
  # $Id$
2
- # Copyright (C) 2006,2008 Caleb Clausen
2
+ # Copyright (C) 2006,2008, 2011 Caleb Clausen
3
3
  # Distributed under the terms of Ruby's license.
4
4
 
5
5
  require 'sequence'
@@ -1,4 +1,4 @@
1
- # Copyright (C) 2006 Caleb Clausen
1
+ # Copyright (C) 2006, 2011 Caleb Clausen
2
2
  # Distributed under the terms of Ruby's license.
3
3
  require 'sequence/stringlike'
4
4
  require 'fcntl'
@@ -1,24 +1,27 @@
1
- # Copyright (C) 2006,2008 Caleb Clausen
1
+ # Copyright (C) 2006,2008, 2011 Caleb Clausen
2
2
  # Distributed under the terms of Ruby's license.
3
3
  class Sequence
4
4
  class Circular < Sequence; end
5
5
  class List < Sequence
6
6
  def initialize(seqs)
7
- seqs.empty? and raise ArgumentError
7
+ seqs.empty? and raise( ArgumentError, 'empty List not allowed' )
8
8
  @list=seqs
9
9
  @current_idx=0
10
10
  @pos=0
11
11
  @start_pos=[0]
12
12
 
13
13
  @list=@list.inject([]){|li,seq|
14
- Circular===seq and raise 'no circular seqs in lists'
15
- Sequence===seq or raise ArgumentError
16
- if List===seq then li+seq.list else li<<seq end
14
+ seq=seq.to_sequence
15
+ case seq
16
+ when Circular; raise ArgumentError, 'no circular seqs in lists'
17
+ when List; li+seq.list
18
+ else li<<seq
19
+ end
17
20
  }
18
21
  @list.each{|seq| seq.on_change_notify(self) }
19
22
  _rebuild_idxs
20
23
 
21
- extend seqs.first.like
24
+ extend @list.first.like
22
25
  end
23
26
 
24
27
  attr :list
@@ -170,7 +173,13 @@ class Sequence
170
173
  return idx
171
174
  end
172
175
 
173
-
176
+ module Overlaid
177
+ def overlaid?; true end
178
+ def subseq(*)
179
+ super.extend Overlaid
180
+ end
181
+ end
182
+ =begin was
174
183
  Overlaid =proc do
175
184
  class<<self
176
185
  def overlaid?; true end
@@ -181,6 +190,7 @@ class Sequence
181
190
  end
182
191
  end
183
192
  end
193
+ =end
184
194
 
185
195
  def modify(*args)
186
196
  result=repldata=args.pop
@@ -192,7 +202,8 @@ class Sequence
192
202
 
193
203
 
194
204
  #mark replacement data as overlaid
195
- repldata.instance_eval(&Overlaid)
205
+ #repldata.instance_eval(&Overlaid)
206
+ repldata.extend Overlaid
196
207
  # end
197
208
  replseqs=[repldata]
198
209
 
@@ -266,7 +277,8 @@ class Sequence
266
277
  return self
267
278
  end
268
279
  data=data.dup.to_sequence
269
- data.instance_eval(&Overlaid)
280
+ #data.instance_eval(&Overlaid)
281
+ data.extend Overlaid
270
282
  @list<<data
271
283
  @start_pos<<@start_pos.last+data.size
272
284
  notify_change(self,@start_pos[-2], 0, data.size)
@@ -278,7 +290,8 @@ class Sequence
278
290
  return self
279
291
  end
280
292
  data=data.dup.to_sequence
281
- data.instance_eval(&Overlaid)
293
+ #data.instance_eval(&Overlaid)
294
+ data.extend Overlaid
282
295
  @list[0,0]=data
283
296
 
284
297
  #insert data.size into beginning of @start_pos
@@ -1,4 +1,4 @@
1
- # Copyright (C) 2006 Caleb Clausen
1
+ # Copyright (C) 2006, 2011 Caleb Clausen
2
2
  # Distributed under the terms of Ruby's license.
3
3
  require 'sequence'
4
4
  require 'sequence/indexed'
@@ -1,4 +1,4 @@
1
- # Copyright (C) 2006 Caleb Clausen
1
+ # Copyright (C) 2006, 2011 Caleb Clausen
2
2
  # Distributed under the terms of Ruby's license.
3
3
  require 'sequence'
4
4
  require 'sequence/indexed'
@@ -1,4 +1,4 @@
1
- # Copyright (C) 2006 Caleb Clausen
1
+ # Copyright (C) 2006, 2011 Caleb Clausen
2
2
  # Distributed under the terms of Ruby's license.
3
3
  require 'sequence'
4
4
  require 'sequence/indexed'
@@ -1,8 +1,8 @@
1
1
  # $Id$
2
- # Copyright (C) 2006 Caleb Clausen
2
+ # Copyright (C) 2006, 2011 Caleb Clausen
3
3
  # Distributed under the terms of Ruby's license.
4
4
 
5
- require 'sequence'
5
+ #require 'sequence'
6
6
  require 'sequence/usedata'
7
7
 
8
8
  class Sequence
@@ -1,5 +1,5 @@
1
1
  # $Id$
2
- # Copyright (C) 2006 Caleb Clausen
2
+ # Copyright (C) 2006, 2011 Caleb Clausen
3
3
  # Distributed under the terms of Ruby's license.
4
4
 
5
5
  require 'sequence'
@@ -1,5 +1,5 @@
1
1
  # $Id$
2
- # Copyright (C) 2006 Caleb Clausen
2
+ # Copyright (C) 2006, 2011 Caleb Clausen
3
3
  # Distributed under the terms of Ruby's license.
4
4
 
5
5
  require 'sequence'
@@ -1,4 +1,4 @@
1
- # Copyright (C) 2006 Caleb Clausen
1
+ # Copyright (C) 2006, 2011 Caleb Clausen
2
2
  # Distributed under the terms of Ruby's license.
3
3
  require 'sequence'
4
4
 
@@ -0,0 +1,9 @@
1
+ #Copyright (c) 2011 Caleb Clausen
2
+ require 'stringio'
3
+ class StringIO < Data
4
+ # convert an StringIO to a seq
5
+ def to_sequence
6
+ Sequence::File.new(self)
7
+ end
8
+ end
9
+
@@ -1,4 +1,4 @@
1
- # Copyright (C) 2006,2008 Caleb Clausen
1
+ # Copyright (C) 2006,2008, 2011 Caleb Clausen
2
2
  # Distributed under the terms of Ruby's license.
3
3
  require 'sequence/subseq'
4
4
 
@@ -216,7 +216,9 @@ class Sequence
216
216
  def _anchor(str,backwards=false,cache=true)
217
217
  cache and result=@@anchor_cache[[str,backwards]] and return result
218
218
  result=backwards ? "(?:#{str})\\Z" : "\\A(?:#{str})"
219
- cache and return @@anchor_cache[[str,backwards]]||=Regexp.new( result )
219
+ cache and return @@anchor_cache[[str,backwards]]||=Regexp.new( result, 0, 'n' )
220
+ #is it really correct to force regexp to be binary encoding here? not sure
221
+ #maybe encoding of str should be detected and reused?
220
222
  return result
221
223
  end
222
224
 
@@ -1,4 +1,4 @@
1
- # Copyright (C) 2006 Caleb Clausen
1
+ # Copyright (C) 2006, 2011 Caleb Clausen
2
2
  # Distributed under the terms of Ruby's license.
3
3
  require 'sequence'
4
4
  require 'sequence/usedata'
@@ -1,6 +1,6 @@
1
- # Copyright (C) 2006 Caleb Clausen
1
+ # Copyright (C) 2006, 2011 Caleb Clausen
2
2
  # Distributed under the terms of Ruby's license.
3
- require 'sequence'
3
+ #require 'sequence'
4
4
  class Sequence
5
5
  # define #read in terms of #data and @pos.
6
6
  # #data must support #[]
@@ -32,4 +32,4 @@ class Sequence
32
32
  def_delegators :@data, :<<
33
33
 
34
34
  end
35
- end
35
+ end