class Origen::Parameters::Set

Constants

OVERRIDE_HASH_METHODS

Allow these parameter names to be valid. When used, they will override the methods of the same name provided by the Hash class.

OVERRIDE_METHODS

Allow these parameter names to be valid. When used, they will override the methods of the same name provided by another class.

Attributes

name[RW]
path[RW]
top_level[RW]

Public Class Methods

new(options = {}) click to toggle source
# File lib/origen/parameters/set.rb, line 16
def initialize(options = {})
  if options[:top_level]
    @top_level = self
    @path = ''
    @owner = options[:owner]
  end
end

Public Instance Methods

[](key) click to toggle source
Calls superclass method
# File lib/origen/parameters/set.rb, line 105
def [](key)
  val = super
  val.is_a?(Proc) ? val.call : val
end
available_contexts() click to toggle source
# File lib/origen/parameters/set.rb, line 37
def available_contexts
  owner._parameter_sets.keys
end
Also aliased as: contexts
context() click to toggle source

Returns the current parameter context

# File lib/origen/parameters/set.rb, line 32
def context
  owner._parameter_current
end
Also aliased as: current_context
contexts()
Alias for: available_contexts
copy_defaults_from(set) click to toggle source
# File lib/origen/parameters/set.rb, line 42
def copy_defaults_from(set)
  set.each do |name, val|
    if val.is_a?(Set)
      self[name] ||= new_subset(name)
      self[name].copy_defaults_from(val)
    else
      self[name] = val
    end
  end
end
current_context()
Alias for: context
define(parent = nil) { |self, parent| ... } click to toggle source
# File lib/origen/parameters/set.rb, line 24
def define(parent = nil, &_block)
  @defining = true
  yield self, parent
  @defining = false
  finalize unless Origen::Parameters.transaction_open
end
defining?() click to toggle source
# File lib/origen/parameters/set.rb, line 116
def defining?
  return true if Origen::Parameters.transaction_open

  if top_level?
    @defining
  else
    top_level.defining?
  end
end
each() { |key, call| ... } click to toggle source
Calls superclass method
# File lib/origen/parameters/set.rb, line 95
def each
  super do |key, val|
    if val.is_a?(Proc)
      yield key, val.call
    else
      yield key, val
    end
  end
end
finalize() click to toggle source
# File lib/origen/parameters/set.rb, line 138
def finalize
  freeze
  each { |_name, val| val.finalize if val.is_a? Set }
end
live() click to toggle source
# File lib/origen/parameters/set.rb, line 159
def live
  owner._request_live_parameter
  self
end
live?() click to toggle source
# File lib/origen/parameters/set.rb, line 155
def live?
  owner._live_parameter_requested?
end
method_missing(method, *args, &block) click to toggle source
Calls superclass method
# File lib/origen/parameters/set.rb, line 53
def method_missing(method, *args, &block)
  if defining?
    if args.length == 0
      self[method] ||= new_subset(method)
    elsif args.length > 1
      super
    else
      m = method.to_s.sub('=', '').to_sym
      self[m] = args.first
    end
  else
    if args.length != 0
      super
    else
      if !key?(method)
        nil
      else
        val = self[method]
        if val.is_a?(Set)
          val
        else
          if live?
            Live.new(owner: owner, path: path, name: method)
          else
            if val.is_a?(Proc)
              val.call(*args)
            else
              val
            end
          end
        end
      end
    end
  end
end
new_subset(name) click to toggle source
# File lib/origen/parameters/set.rb, line 143
def new_subset(name)
  set = Set.new
  set.name = name
  set.top_level = top_level
  if path == ''
    set.path = name.to_s
  else
    set.path = "#{path}.#{name}"
  end
  set
end
owner() click to toggle source
# File lib/origen/parameters/set.rb, line 126
def owner
  if top_level?
    @owner
  else
    top_level.owner
  end
end
test(*args, &block) click to toggle source

Test seems to be some kind of reserved word, that doesn’t trigger the method_missing, so re-defining it here to allow a param group called ‘test’

# File lib/origen/parameters/set.rb, line 112
def test(*args, &block)
  method_missing(:test, *args, &block)
end
to_flat_hash(options = {}) click to toggle source
# File lib/origen/parameters/set.rb, line 164
def to_flat_hash(options = {})
  options = {
    delimiter: '.'
  }.update(options)
  flatten_params(self, options[:delimiter]).first
end
top_level?() click to toggle source
# File lib/origen/parameters/set.rb, line 134
def top_level?
  top_level == self
end

Private Instance Methods

flatten_params(param_hash, delimiter, name = nil, results_hash = {}) click to toggle source
# File lib/origen/parameters/set.rb, line 173
def flatten_params(param_hash, delimiter, name = nil, results_hash = {})
  param_hash.each do |k, v|
    if v.is_a? Origen::Parameters::Set
      name.nil? ? name = k.to_s : name << "#{delimiter}#{k}"
      (results_hash, name) = flatten_params(v, delimiter, name, results_hash)
    else
      if name.nil?
        results_hash[k] = v
      else
        results_hash["#{name}#{delimiter}#{k}"] = v
        if k == param_hash.keys.last
          name = name.include?(delimiter) ? name.split(delimiter)[0..-2].join(delimiter) : nil
        end
      end
    end
  end
  [results_hash, name]
end