Sha256: fcfd4e95cab6d2548aa6131240e89849ccc426ebe2b21c7c2a7cc27bbe87e4e8
Contents?: true
Size: 1.4 KB
Versions: 4
Compression:
Stored size: 1.4 KB
Contents
require 'forwardable' class CfSim::ControlFieldSet extend Forwardable include Enumerable attr_reader :control_fields def_delegators :@control_fields, :clear, :each, :empty?, :hash, :size def initialize(*fields) @control_fields = fields.flatten.dup end def total_area @total_area ||= @control_fields.inject(0) { |area, field| area += field.area } end def -(fields) CfSim::ControlFieldSet.new(@control_fields - extract_field_array(fields)) end def &(fields) CfSim::ControlFieldSet.new(@control_fields & extract_field_array(fields)) end def +(fields) CfSim::ControlFieldSet.new(@control_fields + extract_field_array(fields)) end def ==(other) eql?(other) end def eql?(other) other.class == CfSim::ControlFieldSet && @control_fields.size == other.control_fields.size && (@control_fields - other.control_fields).empty? end def dup # initialize 内で dup しているためここでする必要はない CfSim::ControlFieldSet.new(@control_fields) end def to_s text = "Fields:\n" @control_fields.each { |field| text << " #{field}\n" } text << "Total area: #{total_area}" text end private def extract_field_array(fields) if fields.is_a?(Array) fields elsif fields.is_a?(CfSim::ControlFieldSet) fields.control_fields else raise 'Only for Array or ControlFieldSet' end end end
Version data entries
4 entries across 4 versions & 1 rubygems
Version | Path |
---|---|
cf_sim-1.1.2 | lib/cf_sim/control_field_set.rb |
cf_sim-1.1.1 | lib/cf_sim/control_field_set.rb |
cf_sim-1.1.0 | lib/cf_sim/control_field_set.rb |
cf_sim-1.0.0 | lib/cf_sim/control_field_set.rb |