Project

rrlist

0.0
No commit activity in last 3 years
No release in over 3 years
Inspired by RRDTool. A list that its size remains constant over time. You can use ranges and functions.
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
 Dependencies

Development

>= 0
>= 0

Runtime

 Project Readme

RRList Gem Version Build Status

Build Status rdoc Bitdeli Badge

Inspired by RRDTool

Basically, you can add elements to a list, but the sizes remains constant over time.

If you add an element to to the list that is out of the range, moves the cursor forward and items at the lower indexes are lost.

For example with a list of size 5:

[1,2,3,4,5]
add 6
[2,3,4,5,6]
add 7
[3,4,5,6,7]
add 20
[nil,nil,nil,nil,20]

Install

gem install rrlist

or

gem 'rrlist'

or

git clone ...
rake install

Usage

    require 'rrlist'

Basic manipulation

    rrlist = RRList::List.new :size => 10

    rrlist.values #=> [nil, nil, nil, nil, nil, nil, nil, nil, nil, nil]

    1.upto(100) { |n| rrlist.add(n) }

    rrlist.values     #=> [91, 92, 93, 94, 95, 96, 97, 98, 99, 100]
    rrlist.min_index  #=> 91
    rrlist.min_index  #=> 100
    rrlist.get(93)    #=> 93

    rrlist.add(101)

    rrlist.values     #=> [92, 93, 94, 95, 96, 97, 98, 99, 100, 101]
    rrlist.min_index  #=> 92
    rrlist.min_index  #=> 101

    rrlist.add("any object")

    rrlist.values     #=> [93, 94, 95, 96, 97, 98, 99, 100, 101, "any object"]
    rrlist.min_index  #=> 93
    rrlist.min_index  #=> 102

    rrlist.add_at 105, "A"
    rrlist.values     #=> [96, 97, 98, 99, 100, 101, "any object", nil, nil, "A"]
    rrlist.min_index  #=> 96
    rrlist.max_index  #=> 105

    rrlist.add_at 2000,"B"
    rrlist.add_at 105, "A"
    rrlist.values         #=> [nil, nil, nil, nil, nil, nil, nil, nil, nil, "B"]
    rrlist.min_index      #=> 1991
    rrlist.max_index      #=> 2000

Looping

    rrlist = RRList::List.new :size => 10

    1.upto(100) { |n| rrlist.add(n) }

    rrlist.each {  |value| ... }
    rrlist.each_with_index {  |value,index| puts "#{value} #{index}" }
    # => 91 91
    # => 92 92
    ....

Ranges

A range of indexs grouped in the same position. For a renge of 3 for indexes 0,1,2 the value goes in position 1

    rrlist = RRList::List.new :size => 10, :range => 3

    rrlist.add_at 0, 0
    rrlist.values         #=> [0, nil, nil, nil, nil, nil, nil, nil, nil, nil]
    rrlist.add_at 1, 1
    rrlist.values         #=> [1, nil, nil, nil, nil, nil, nil, nil, nil, nil]
    rrlist.add_at 2, 2
    rrlist.values         #=> [2, nil, nil, nil, nil, nil, nil, nil, nil, nil]
    rrlist.add_at 3, 3
    rrlist.values         #=> [2, 3, nil, nil, nil, nil, nil, nil, nil, nil]
    rrlist.add_at 4, 4
    rrlist.values         #=> [2, 4, nil, nil, nil, nil, nil, nil, nil, nil]
    rrlist.add_at 5, 5
    rrlist.values         #=> [2, 5, nil, nil, nil, nil, nil, nil, nil, nil]

    rrlist = RRList::List.new :size => 10, :range => 5

    0.upto(100) { |n| rrlist.add(n) }

    rrlist.values     #=> [59, 64, 69, 74, 79, 84, 89, 94, 99, 100]
    rrlist.min_index  #=> 55
    rrlist.max_index  #=> 100

Functions

To sum all the values added to a range

    rrlist = RRList::List.new :size => 10, :range => 5 do |index, old_value, new_value|
      (old_value||0) + new_value
    end

    0.upto(100) { |n| rrlist.add(n) }

    rrlist.values     #=> [285, 310, 335, 360, 385, 410, 435, 460, 485, 100]
    rrlist.min_index  #=> 55
    rrlist.max_index  #=> 100

Array API

    rrlist = RRList::List.new :size => 10

    rrlist.values   #=> [nil, nil, nil, nil, nil, nil, nil, nil, nil, nil]

    rrlist[1]="a"
    rrlist.values   #=> [nil, "a", nil, nil, nil, nil, nil, nil, nil, nil]
    rrlist[1]       #=> "a"

    rrlist[2]="b"
    rrlist.values   #=> [nil, "a", "b", nil, nil, nil, nil, nil, nil, nil]
    rrlist[2]       #=> "b"

    rrlist << "c"
    rrlist.values   #=> [nil, "a", "b", "c", nil, nil, nil, nil, nil, nil]
    rrlist[3]       #=> "c"

License

MIT