[#5322] O(1) performance for insertions/deletions at the front of an Array/String — Eric Mahurin <eric_mahurin@...>
I just did some benchmarks on push, pop, shift, and unshift
On Fri, 1 Jul 2005, Eric Mahurin wrote:
--- Mathieu Bouchard <matju@artengine.ca> wrote:
On Sat, 2 Jul 2005, Eric Mahurin wrote:
--- Mathieu Bouchard <matju@artengine.ca> wrote:
On Sun, 3 Jul 2005, Eric Mahurin wrote:
--- Mathieu Bouchard <matju@artengine.ca> wrote:
Hi,
--- Yukihiro Matsumoto <matz@ruby-lang.org> wrote:
Hi,
Yukihiro Matsumoto wrote:
--- Florian Gro<florgro@gmail.com> wrote:
Eric Mahurin wrote:
--- Nikolai Weibull
Eric Mahurin wrote:
[#5388] Problem with socket communications on Windows — "Jim McMaster" <jim.mcmaster@...>
I recently installed PGP 9.0 on my Windows XP SP2 machine. At that point,
[#5391] Object#=~ — Ryan Davis <ryand-ruby@...>
Since Rexexp#=~ and String#=~ return nil if they fail to match,
Hi,
Hi,
--- Yukihiro Matsumoto <matz@ruby-lang.org> wrote:
[#5409] socket.c - s_recvfrom — Zach Dennis <zdennis@...>
If I am reading s_recvfrom correctly in can throw an error which kills
[#5420] Sydney Developer Preview 1 released — Evan Webb <evanwebb@...>
Sydney, an experimental ruby interpreter, has been released!
Thanks everyone for the feedback so far!
Hi,
The MD5 sum is 53d1bde4542365caf4849c56e6274617.
Hi,
On 7/12/05, nobuyoshi nakada <nobuyoshi.nakada@ge.com> wrote:
Hi,
Hello,
[#5445] GC tweak — Stefan Kaes <skaes@...>
I have found that the performance of current garbage collector
[#5451] bug in pstore (ruby 1.8.2) on Windows ( Win XP) ? — noreply@...
Bugs item #2101, was opened at 2005-07-14 15:30
[#5470] Bogus age value from Etc — Daniel Berger <Daniel.Berger@...>
Hi all,
[#5471] make fail; ruby v182 not finding readline ? — OpenMacNews <OpenMacNews@...>
hi all,
[#5476] Bug in ruby's command line parsing — Lothar Scholz <mailinglists@...>
Hello,
On Sat, Jul 16, 2005 at 10:11:34AM +0900, Lothar Scholz wrote:
[#5492] ruby ( v183) bcc32: using Socket.new with timeout -> files not closed — noreply@...
Bugs item #2131, was opened at 2005-07-19 17:34
Observer patch
Hi all.
A while ago, I was playing with some network programming, and found
that I wanted to have a class that would observe two other Observable
classes. I could have done this by sending another parameter with
notify_observers specifying which class the update came from -- but
that is, to say the least, ugly. So I came up with this patch.
(attached)
What it does is allow you to append a paramter to add_observer.
Observable will then take that paramater and use it instead of the
default :update -- that means you can have one Observable class call
#update_class1 on your class and have the next call #update_class2.
Originally I kept the internal list of observers as an array and kept
the method to send in a class variable, but that pollutes the
namespace further and does not allow for multiple classes observing
the same class to use different method names. So I moved the list of
observers to a hash, that each class could have its own method called.
I request the inclusion of this patch in Ruby 1.8. It is a trivial
patch, and I myself cannot find any bugs -- though if someone else
would be kind enough to give it a quick going-over, I'd be much
obliged.
Without further ado, I present The Patch.
--- observer.rb 2005-07-05 09:28:14.452114352 +1000
+++ observer-new.rb 2005-07-05 09:36:49.987741024 +1000
@@ -120,12 +120,12 @@
# Add +observer+ as an observer on this object. +observer+ will now receive
# notifications.
#
- def add_observer(observer)
- @observer_peers = [] unless defined? @observer_peers
- unless observer.respond_to? :update
- raise NoMethodError, "observer needs to respond to `update'"
+ def add_observer(observer, func=:update)
+ @observer_peers = {} unless defined? @observer_peers
+ unless observer.respond_to? func
+ raise NoMethodError, "observer does not respond to `#{func.to_s}'"
end
- @observer_peers.push observer
+ @observer_peers[observer] = func
end
#
@@ -181,9 +181,9 @@
def notify_observers(*arg)
if defined? @observer_state and @observer_state
if defined? @observer_peers
- for i in @observer_peers.dup
- i.update(*arg)
- end
+ @observer_peers.each { |k, v|
+ k.send v, *arg
+ }
end
@observer_state = false
end
--
- nornagon