sequence 0.2.3 → 0.2.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -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