[#8566] Visions for 2001/1.7.x development? — Robert Feldt <feldt@...>

Hi matz and other Ruby developers,

18 messages 2001/01/03
[#8645] Re: Visions for 2001/1.7.x development? — matz@... (Yukihiro Matsumoto) 2001/01/04

Hi,

[#8580] bug?? — jmichel@... (Jean Michel)

I don't understand the following behaviour:

19 messages 2001/01/03

[#8633] Interesting Language performance comparisons - Ruby, OCAML etc — "g forever" <g24ever@...>

13 messages 2001/01/04

[#8774] No :<, :>, etc. methods for Array — "Brian F. Feldman" <green@...>

So, why not include Comparable in Array by default? It shouldn't have any

28 messages 2001/01/07
[#8779] Re: No :<, :>, etc. methods for Array — matz@... (Yukihiro Matsumoto) 2001/01/07

Hi,

[#8780] Re: No :<, :>, etc. methods for Array — "Brian F. Feldman" <green@...> 2001/01/07

matz@zetabits.com (Yukihiro Matsumoto) wrote:

[#8781] Re: No :<, :>, etc. methods for Array — gotoken@... (GOTO Kentaro) 2001/01/07

In message "[ruby-talk:8780] Re: No :<, :>, etc. methods for Array"

[#8782] Re: No :<, :>, etc. methods for Array — "Brian F. Feldman" <green@...> 2001/01/07

gotoken@math.sci.hokudai.ac.jp (GOTO Kentaro) wrote:

[#8829] Sandbox (again) — wys@... (Clemens Wyss)

Hi,

20 messages 2001/01/08
[#8864] Re: Sandbox (again) — Clemens Hintze <c.hintze@...> 2001/01/08

On 8 Jan, Clemens Wyss wrote:

[#8931] String confusion — Anders Bengtsson <ndrsbngtssn@...>

Hello everyone,

21 messages 2001/01/09
[#8937] Re: String confusion — matz@... (Yukihiro Matsumoto) 2001/01/09

Hi,

[#8953] Please remove account from files — "Thomas Daniels" <westernporter@...>

Please take my e-mail address from your files and "CANCEL" my =

14 messages 2001/01/09
[#8983] Re: Please remove account from files — John Rubinubi <rubinubi@...> 2001/01/10

On Wed, 10 Jan 2001, Thomas Daniels wrote:

[#9020] time to divide -talk? (was: Please remove account from files) — Yasushi Shoji <yashi@...> 2001/01/10

At Wed, 10 Jan 2001 14:23:30 +0900,

[#9047] Re: time to divide -talk? (was: Please remov e account from files) — Aleksi Niemel<aleksi.niemela@...>

Yasushi Shoji:

27 messages 2001/01/10
[#9049] Re: time to divide -talk? — Yasushi Shoji <yashi@...> 2001/01/10

At Thu, 11 Jan 2001 00:20:45 +0900,

[#9153] what about this begin? — Anders Strandl Elkj誡 <ase@...> 2001/01/11

[#9195] Re: Redefining singleton methods — ts <decoux@...>

>>>>> "H" == Horst Duch=EAne?= <iso-8859-1> writes:

10 messages 2001/01/12

[#9242] polymorphism — Maurice Szmurlo <maurice@...>

hello

73 messages 2001/01/13

[#9279] Can ruby replace php? — Jim Freeze <jim@...>

When I read that ruby could be used to replace PHP I got really

15 messages 2001/01/14

[#9411] The Ruby Way — "Conrad Schneiker" <schneiker@...>

As a member of the "Big 8" newsgroups, "The Ruby Way" (of posting) is to

15 messages 2001/01/17

[#9462] Re: reading an entire file as a string — ts <decoux@...>

>>>>> "R" == Raja S <raja@cs.indiana.edu> writes:

35 messages 2001/01/17
[#9465] Re: reading an entire file as a string — Dave Thomas <Dave@...> 2001/01/17

raja@cs.indiana.edu (Raja S.) writes:

[#9521] Larry Wall INterview — ianm74@...

Larry was interviewed at the Perl/Ruby conference in Koyoto:

20 messages 2001/01/18
[#10583] Re: Larry Wall INterview — "greg strockbine" <gstrock@...> 2001/02/08

Larry Wall's interview is how I found out

[#9610] Re: 101 Misconceptions About Dynamic Languages — "Ben Tilly" <ben_tilly@...>

"Christian" <christians@syd.microforte.com.au> wrote:

13 messages 2001/01/20

[#9761] Re: 101 Misconceptions About Dynamic Languages — ts <decoux@...>

>>>>> "C" == Christoph Rippel <crippel@primenet.com> writes:

16 messages 2001/01/23

[#9792] Ruby 162 installer available — Dave Thomas <Dave@...>

15 messages 2001/01/24

[#9958] Re: Vim syntax files again. — "Conrad Schneiker" <schneik@...>

Hugh Sasse wrote:

14 messages 2001/01/26
[#10065] Re: Vim syntax files again. — Hugh Sasse Staff Elec Eng <hgs@...> 2001/01/29

On Sat, 27 Jan 2001, Conrad Schneiker wrote:

[#9975] line continuation — "David Ruby" <ruby_david@...>

can a ruby statement break into multiple lines?

18 messages 2001/01/27
[#9976] Re: line continuation — Michael Neumann <neumann@...> 2001/01/27

On Sat, 27 Jan 2001, David Ruby wrote:

[#9988] Re: line continuation — harryo@... (Harry Ohlsen) 2001/01/28

>A statement break into mutliple lines if it is not complete,

[ruby-talk:9743] Write Ruby's Array in Ruby

From: Mathieu Bouchard <matju@...>
Date: 2001-01-23 01:35:18 UTC
List: ruby-talk #9743
Here is a _rough_ sketch of the ArrayInterface / ArrayMixin modules. See
introduction at the top of the file.

I invite people on this list to contribute missing methods, bug fixing,
performance improvements, etc.

Future versions will be posted on my webpage instead (and announced here
of course)

ArrayMixin.rb:
----------------8<--------cut-here--------8<----------------

=begin

ArrayMixin 0.1

Purpose of this document:

	* To describe a minimal but vaguely efficient interface for
	interacting with Array-like objects. 

	* To implement a set of default replacements for methods provided
	in Array but not declared in the Array interface.

This is split in two parts:

	ArrayInterface
	ArrayMixin

Warning:

	This software is not tested at all.
	It contains a billion bugs (roughly)

Author(s):

	Mathieu Bouchard <matju@cam.org>

	Copyright (c) 2001 by Mathieu Bouchard
	Licensed under the same license as Ruby.

=end

module ArrayInterface
	def length
		# must return the number of elements in the array.
		raise NotImplementedError
	end
	def get(i)
		# i is in 0...length
		# returns contents of cell i
		raise NotImplementedError
	end
	def put(i,v)
		# i is in 0...length
		# sets cell i to value v
		# returns nil
		# note: never changes the array length
		raise NotImplementedError
	end
	def get_many(i,n)
		# i is in 0...length
		# i+n is in 0..length
		# returns plain Array of elements i...(i+n)
		raise NotImplementedError
	end
	def splice(i,n,*v)
		# i is in 0..length
		# i+n is in 0..length
		# deletes elements in i...(i+n)
		# inserts *v elements at i
		# returns nil
		raise NotImplementedError
	end

	# Exceptions:
	# NotImplementedError: abstract method not overloaded
	# ArgumentError: argument precondition failed

	#! and dup ?
end

module ArrayMixin
	include ArrayInterface
	include Enumerable

	# def ArrayMixin.[](*v); end

	def initialize(length,value)
		# presuming the array is created by the implementor,
		# and is empty.

		if (len < 0)
			raise ArgumentError "negative array size"
		end

		(0...length).each {|i| put i,value }
	end

	def [](i,l=nil)
		#! handle the Range case
		#! handle the length case
		#! handle number of args errors
		if i < 0 then i = length - 1 - i end
		if i < 0 || i >= length then nil else get i end
	end
	def []=(i,v,w=nil)
		#! handle the Range case
		#! handle the length case
		#! handle number of args errors
		if i < 0 then i += length end
		if i < 0 then
			nil
		else
			if i >= length
				splice length,0,*Array.new(i-length+1)
			end
			put i,v
			v
		end
	end

	def +(other)
		foo = dup
		foo.splice length,0,*other
		foo
	end
	def -(other)
		t = {}
		each {|x| t[x]=1 }
		other.each {|x| t.delete x }
		r
	end
	# as seen in [ruby-talk:6756]
	def &(other)
		t = {}
		r = []
		other.each {|x| t[x]=1 }
		uniq.each  {|x| r<<x if t.has_key? x }
		r
	end
	# as seen in [ruby-talk:6756]
	def |(other)
		t = {}
		r = []
		(self+other).each {|x| r<<x unless t.has_key?(x); t[x]=1 }
		r
	end

	def *(n)
		foo = []
		n.times { foo.splice length,0,*self }
	end

	def <<(v)
		foo.splice length,0,v
		self
	end

	def <=>(other)
		#! write me
	end

	def assoc(key)
		#! write me
	end

	def clear
		splice 0,length
	end

	def concat(other)
                splice length,0,*other
		self
	end		

	def compact!
		#! write me
	end
	def compact
		dup.compact!
	end

	def delete(v,&proc)
		#! write me
	end
	def delete_at(i)
		splice(i,1)
	end

	def delete_if(i)
		#! write me
	end

	def each(&proc)
		#! write me
	end

	def each_index(&proc)
		(0...length).each {}
	end

	def empty?
		length == 0
	end

	def fill(v,start=0,length=nil)
		#! write me / fix me
	end

	def filter(&proc)
		(0...length).each {|i| put i, proc.call(get i) }
	end
	def flatten
		dup.flatten!
	end
	def flatten!
		#! write me
	end
	def freeze
		#! write me
	end
	def frozen
		#! write me
	end
	def include?(v)
		[] != find_all {|x| x == v }
	end
	def index(v)
		#! write me
	end
	def indexes(*i)
		#! write me
	end
	def indices(*i)
		#! write me
	end
	def join(sep=$,)
		#! write me
	end
	def size
		length
	end
	def nitems
		find_all {|x| x != nil }.length
	end
	def pack(template)
		#! write me (?)
		get_many(0,length).pack(template)
	end
	def pop
		splice length-1,1
	end
	def push(v)
		splice length,0,v
	end
	def rassoc(v)
		#! write me
	end

	def reject(i,&proc); delete_if(i,&proc); end

	def replace(other)
		splice 0,length,*other
	end
	def reverse
		dup.reverse!
	end
	def reverse!
		#! write me
	end
	def reverse_each(&proc)
		reverse.each(&proc)
	end
	def rindex(v)
		#! write me
	end
	def shift
		splice 0,1
	end
	def sort(&proc)
		dup.sort!
	end
#	def sort!(&proc=proc{|a,b|a<=>b})
	def sort!(&proc)
		proc ||= proc{|a,b|a<=>b}
		#! write me
	end

	# as seen in [ruby-talk:6756]
	def uniq; self|[] end
	def uniq!; replace self|[]; end

	def unshift(v)
		splice 0,0,v
	end
end

----------------8<--------cut-here--------8<----------------

matju


In This Thread

Prev Next