0
0
Fork 0

Create a base class for weighting

This class should contain methods, which are used in more than one weighting
class.
At the moment it contains the bucket handling.
This commit is contained in:
Stormwind 2015-02-23 21:28:41 +01:00
parent 7c7c554d83
commit a80c46c5c9
2 changed files with 61 additions and 34 deletions

View File

@ -0,0 +1,57 @@
module Rubella
module Weighting
# The Rubella::Weighting object processes the given input data to an valid
# output processable Array.
# These arrays contain a subarray for every unit of time. And these Array
# contain the buckets within the values for the output objects.
# The Weighting of the print intensitiy is done here, so that the output
# objects job is simply to print the stuff.
#
class Base
attr_reader :buckets
# :steps
# Constructor
# Creates a new Rubella::Weighting::xy object.
#
# @param buckets int must be one of 1, 2, 5, 10, 20, 50 default is 10
# @return Rubella::Weighting::PerValue
# @raise ArgumentError
#
def initialize(buckets = 10)
self.buckets = buckets
end
# Sets the buckets, if the value is valid
#
# @param buckets int The amount of buckets
# @raise ArgumentError
#
def buckets= buckets
# Must be divideable by 100
if([1, 2, 5, 10, 20, 50].index(buckets) == nil)
raise ArgumentError, "Amount of buckets must be 1, 2, 5, 10, 20 or 50"
end
@steps = 100/buckets
@buckets = buckets
end
# Creates a output readable list.
# This list is Array within a subarrays, which contain the buckets for
# every time value unit.
#
# @param input Rubella::Input An input object
# @return Array
#
def parse input
raise NotImplementedError "Please override 'parse' in your concrete "+
"implementation"
end
end
end
end

View File

@ -1,30 +1,14 @@
require "rubella/weighting/base"
module Rubella
module Weighting
# The Rubella::Weighting object processes the given input data to an valid
# output processable Array.
# These arrays contain a subarray for every unit of time. And these Array
# contain the buckets within the values for the output objects.
# The Weighting of the print intensitiy is done here, so that the output
# objects job is simply to print the stuff.
#
# The Rubella::Weighting::PerValue object weights every bucket set to 1 in
# ammount. So if you have have for example four cores, every core is
# weighted to 0.25 no matter how much the load of a single core is. It's
# just a "as is" weighting.
class PerValue
attr_reader :buckets
# :steps
# Constructor
# Creates a new Rubella::Weighting::PerValue object.
#
# @param buckets int must be one of 1, 2, 5, 10, 20, 50 default is 10
# @return Rubella::Weighting::PerValue
# @raise ArgumentError
def initialize(buckets = 10)
self.buckets = buckets
end
#
class PerValue < Base
# Creates a output readable list.
# This list is Array within a subarrays, which contain the buckets for
@ -57,20 +41,6 @@ module Rubella
data_list
end
# Sets the buckets, if the value is valid
#
# @param buckets int The amount of buckets
# @raise ArgumentError
def buckets= buckets
# Must be divideable by 100
if([1, 2, 5, 10, 20, 50].index(buckets) == nil)
raise ArgumentError, "Amount of buckets must be 1, 2, 5, 10, 20 or 50"
end
@steps = 100/buckets
@buckets = buckets
end
end
end