class

Quartz::MultiComponent::Component

Inherits Quartz::Stateful / Quartz::Verifiable / Quartz::Observable / Quartz::Schedulable / Quartz::Model / Reference / Object

Constants

STATE_CHECKS = {state_complete: false}

Constructors

new(name, state)
Source
new(name)
Source

Class methods

check(*attributes : Symbol, **kwargs)
Source
check_with(klass : Verifiers::RuntimeValidator.class, **kwargs)

Passes the model off to the class or classes specified and allows them to add errors based on more complex conditions.

class MyModel
  include Quartz::Verifiable
  check_with MyVerifier
end

class MyVerifier < Quartz::Verifiers::RuntimeChecker
  def validate(model)
    if some_test
      model.errors.add(:phase, "This model state is invalid")
    end
  end

  # ...
end
Source
check_with(klass : Verifiers::EachChecker.class, *attributes : Symbol, **kwargs)

Passes the model off to the class or classes specified and allows them to add errors based on more complex conditions.

class MyModel
  include Quartz::Verifiable
  check_with MyVerifier
end

class MyVerifier < Quartz::Verifiers::EachChecker
  def check_each(model, attribute, value)
    if some_test
      model.errors.add(attribute, "This model attribute is invalid")
    end
  end

  # ...
end
Source
clear_verifiers
Source
precision_level

The precision associated with the model.

Source
precision_level=(precision_level : Scale)

The precision associated with the model.

Source
verifiers
Source

Instance methods

__initialize_state__(processor)

Used internally by the simulator :nodoc:

Source
__parent__=(parent : MultiComponent::Model)
Source
confluent_transition(messages : Hash(InputPort, Array(Any))) : Hash(Name, Any) | Nil

This is the default definition of the confluent transition. Here the internal transition is allowed to occur and this is followed by the effect of the external transition on the resulting state.

Override this method to obtain a different behavior. For example, the opposite order of effects (external transition before internal transition). Of course you can override without reference to the other transitions.

Source
elapsed

This attribute is updated automatically along simulation and represents the elapsed time since the last transition.

Source
elapsed=(elapsed : Duration)

This attribute is updated automatically along simulation and represents the elapsed time since the last transition.

Source
influencees
Source
influencers
Source
input_port(port)
Source
internal_transition

Internal transition function (δint), called when the model should be activated, e.g when #elapsed reaches #time_advance

Override this method to implement the appropriate behavior of your model.

Source
model_precision

Returns the precision associated with the class.

Source
output_port(port)
Source
reaction_transition(states)

TODO: doc

Source
time_advance

Time advance function (ta), called after each transition to give a chance to self to be active.

Override this method to implement the appropriate behavior of your model.

Example:

def time_advance
  Quartz.infinity
end
Source

Macros

precision(scale = "base")

Defines the precision level associated to this class of models.

Usage:

precision must receive a scale unit. The scale unit can be specified with a constant expression (e.g. 'kilo'), with a Scale struct or with a number literal.

precision Scale.::KILO
precision -8
precision femto

If specified with a constant expression, the unit argument can be a string literal, a symbol literal or a plain name.

precision kilo
precision "kilo"
precision :kilo

Example

class MyModel < Quartz::AtomicModel
  precision femto
end

Is the same as writing:

class MyModel < Quartz::AtomicModel
  self.precision = Scale::FEMTO
end

Or the same as:

class MyModel < Quartz::AtomicModel; end

MyModel.precision = Scale::FEMTO
Source