Description

A method that speeds methods up at the cost of memory (or disk space).

Prerequisites

Ruby 1.8.0 or later

Installation

Standard Installation

rake test (optional)
rake install

Gems Installation

rake test (optional)
rake gem install

Synopsis

require "memoize"
include Memoize

# Inefficient fibonacci method
def fib(n)
   return n if n < 2
   fib(n-1) + fib(n-2)
end

fib(100) # Slow

memoize(:fib)
fib(100) # Fast

# Or store the cache to a file for later use
memoize(:fib, "fib.cache")
fib(100) # Fast

Constants

Memoize::MEMOIZE_VERSION

Returns the version of this package as a String.

Methods

Memoize#memoize(method, file=nil)

Takes a +method+ (symbol) and caches the results of +method+ in a hash
table. If you call +method+ again with the same arguments, memoize gives
you the value from the table instead of letting the method compute the
value again.

If +file+ is provided, the results are cached to that file.  Note that
this uses Marshal internally.  Beware of changes in the Marshal format
should you happen to upgrade.

Returns the cache, which you can inspect or manipulate directly if you are
so inclined.

Acknowledgements

Code borrowed from Nobu Nakada (ruby-talk:155159).
Code borrowed from Ara Howard (ruby-talk:173428).
Code borrowed from Andrew Johnson (http://tinyurl.com/8ymx8)
Ideas taken from Brian Buckley and Sean O'Halpin.
Tiny URL provided for Andrew Johnson because I could not find the ruby-talk
reference.  The gateway may have been broken at the time.

Known Issues

None that I'm aware of.  Please report any problems on the Shards tracker
or the forums at http://www.rubyforge.org/projects/shards.

License

Artistic 2.0

Warranty

This package is provided "as is" and without any express or
implied warranties, including, without limitation, the implied
warranties of merchantability and fitness for a particular purpose.
(C) 2005-2009 Daniel J. Berger
All Rights Reserved

Author

Daniel J. Berger
djberg96 at gmail dot com
IRC nick: imperator (freenode)