Allocation free alternative to scala.collection.mutable.Map with similar interface.
Allocation free alternative to scala.collection.mutable.Map with similar interface. This simplifies optimization of performance critical code.
The Base trait houses common AST nodes.
The Base trait houses common AST nodes. It also manages a list of encountered definitions which allows for common sub-expression elimination (CSE).
Function interface which support specialization and thus unboxed invocations.
Convenient but SLOW adapter to be used in tests.
Can be thrown in staged method body to prevent body unfolding.
Can be thrown in staged method body to prevent body unfolding. When this exception is thrown, the caller can catch it and reify this invocation as MethodCall graph node.
This file is necessary to make this module non-empty.
This file is necessary to make this module non-empty. Otherwise, the compilation doesn't happen and TargetModulePipeline is not executed.
A slice in the Scalan cake with base classes for various descriptors.
Integral operations with overflow checks.
Integral operations with overflow checks.
Raise exception when overflow is detected.
Each instance of this typeclass overrides three methods plus
, minus
, times
.
All other methods are implemented by delegating to the corresponding Integral instance from
standard Scala library.
This trait is used in core IR to avoid implicitly using standard scala implementations.
Numeric operations with overflow checks.
Numeric operations with overflow checks.
Raise exception when overflow is detected.
Each instance of this typeclass overrides three methods plus
, minus
, times
.
All other methods are implemented by delegating to the corresponding Numeric instance from
standard Scala library.
This trait is used in core IR to avoid implicitly using standard scala implementations
Ordering operations to be used with other Exact traits.
Ordering operations to be used with other Exact traits. All methods are implemented by delegating to the corresponding Ordering instance from standard Scala library. This trait is used in core IR to avoid implicitly using standard scala implementations.
Non-thread safe (but efficient on single thread) immutable lazy value.
Non-thread safe (but efficient on single thread) immutable lazy value.
The block
is executed only once.
Information about generated Special library module.
Information about generated Special library module. Instances are created in generated code.
*Impl.scala files
Non-thread safe (but efficient on single thread) immutable lazy value with reset.
Non-thread safe (but efficient on single thread) immutable lazy value with reset.
The block
may execute potentially many times, but only once before each reset.
Allocation free alternative to scala.Option with similar interface.
Allocation free alternative to scala.Option with similar interface. Using this in recognizers allows: 1) to avoid allocation of Some(x) 2) reading random memory location (where Some is stored) to access x
Base type for all runtime type descriptors.
Base type for all runtime type descriptors. Sigma uses type descriptors to represent structure of the data values. Data values of registers and context variables come equipped with type descriptors in order to check the actual type is the same as the type expected by the script.
getReg, getVar
Aggregate cake with all inter-dependent modules assembled together.
Aggregate cake with all inter-dependent modules assembled together.
Each instance of this class contains independent IR context, thus many
instances can be created simultaneously.
However, the inner types declared in the traits are path-dependant.
This in particular means that ctx1.Ref[_] and ctx2.Ref[_] are different types.
The typical usage is to create val ctx = new Scalan
and then import inner
declarations using import ctx._
.
This way the declaration will be directly available as if they were global
declarations.
At the same time cake design pattern allow to override
many methods and values
in classed derived from Scalan
, this is significant benefit over
*everything is global* design.
Base type for all wrapper specification classes.
Base type for all wrapper specification classes.
OptionWrapSpec as an example
Immutable empty array of integers, should be used instead of allocating new empty arrays.
Immutable empty Seq[Int] backed by empty array.
Immutable empty Seq[Int] backed by empty array.
You should prefer using it instead of Seq[Int]()
or Seq.empty[Int]
ExactNumeric instances for all types.
ExactNumeric instances for all types.
ExactOrdering instances for all types.
Scala specific trick to appease erasure of methods argument types.
Scala specific trick to appease erasure of methods argument types. Example usage: def m1(l: List[Int])(implicit o: Overloaded1) def m2(l: List[String])(implicit o: Overloaded2) Without the implicit arguments the methods would have identical signatures after erasure, which is a compilation time error.
Create a new empty buffer around pre-allocated empty array.
Create a new empty buffer around pre-allocated empty array. This method is preferred, rather that creating empty debox.Buffer directly because it allows to avoid allocation of the empty array.
Allows implicit resolution to find appropriate instance of ClassTag in the scope where RType is implicitly available.