Class/Object

scalan.primitives.Thunks

ThunkDef

Related Docs: object ThunkDef | package Thunks

Permalink

class ThunkDef[A] extends Scalan.AstGraph with Scalan.Def[Scalan.Thunk[A]]

Graph node representing thunk with reified body. Each thunk node is a specialized implementation of AstGraph abstract class.

Linear Supertypes
Scalan.Def[Scalan.Thunk[A]], Scalan.AstGraph, Scalan.Node, Product, Equals, AnyRef, Any
Ordering
  1. Alphabetic
  2. By Inheritance
Inherited
  1. ThunkDef
  2. Def
  3. AstGraph
  4. Node
  5. Product
  6. Equals
  7. AnyRef
  8. Any
  1. Hide All
  2. Show All
Visibility
  1. Public
  2. All

Instance Constructors

  1. new ThunkDef(root: Scalan.Ref[A], _scheduleIds: ⇒ Scalan.ScheduleIds)

    Permalink

    root

    graph node, which represents the result value of thunk forcing.

    _scheduleIds

    compact representation of thunk body, i.e. a sequence of graph nodes, which will be executed when the thunk is forced. Each node is given by its id. The node can be resolved using getSym(id).node expression.

Value Members

  1. final def !=(arg0: Any): Boolean

    Permalink
    Definition Classes
    AnyRef → Any
  2. final def ##(): Int

    Permalink
    Definition Classes
    AnyRef → Any
  3. final def ==(arg0: Any): Boolean

    Permalink
    Definition Classes
    AnyRef → Any
  4. lazy val allNodes: Map[Int, Scalan.GraphNode]

    Permalink
    Definition Classes
    AstGraph
  5. final def asInstanceOf[T0]: T0

    Permalink
    Definition Classes
    Any
  6. def boundVars: Seq[Scalan.Sym]

    Permalink

    If this graph represent Lambda abstraction, the boundVars is lambda bound symbols.

    If this graph represent Lambda abstraction, the boundVars is lambda bound symbols. otherwise this is empty set.

    Definition Classes
    ThunkDefAstGraph
  7. final def buildFlatSchedule(schedule: Scalan.Schedule, flatBuf: Buffer[Scalan.Sym]): Unit

    Permalink

    Flatten the given schedule into single sequence of non-AstGraph definitions.

    Flatten the given schedule into single sequence of non-AstGraph definitions. All scope forming definitions like Lambda and ThunkDef are recursively unfolded in the given buffer flatBuf. NOTE: The symbols of AstGraph-like definitions are added to flatBuf AFTER the unfolded body.

    Definition Classes
    AstGraph
  8. def buildUsageMap(schedule: Scalan.Schedule, usingDeps: Boolean): Map[Int, Scalan.GraphNode]

    Permalink

    Build usage information induced by the given schedule.

    Build usage information induced by the given schedule. For each symbol of the schedule a GraphNode is created and usages are collected.

    Definition Classes
    AstGraph
  9. def canEqual(other: Any): Boolean

    Permalink
    Definition Classes
    ThunkDef → Equals
  10. def clone(): AnyRef

    Permalink
    Attributes
    protected[java.lang]
    Definition Classes
    AnyRef
    Annotations
    @throws( ... )
  11. final def deps: Array[Scalan.Sym]

    Permalink

    Dependencies of this definition from other definitions.

    Dependencies of this definition from other definitions. If definition is interpreted as an operation, then dependencies are arguments of the operation. If definition if compound (like Lambda of ThunkDef) then deps is equals to free variables used in the body of the compound definition. This array also refers to predecessors of this graph node, so it is used to build topological ordering (execution schedule) of operations.

    returns

    array of referencies to other definitions.

    Definition Classes
    Node
  12. lazy val domain: Set[Int]

    Permalink

    Set of symbol ids in the schedule.

    Set of symbol ids in the schedule. Can be used to quickly recognize symbols belonging to the body of this definition.

    Definition Classes
    AstGraph
  13. implicit def eA: Scalan.Elem[A]

    Permalink
  14. final def elements: Array[AnyRef]

    Permalink

    All data elements of this graph node to be used in structural equality.

    All data elements of this graph node to be used in structural equality.

    Definition Classes
    Node
    See also

    equals where elements are used.

  15. final def eq(arg0: AnyRef): Boolean

    Permalink
    Definition Classes
    AnyRef
  16. def equals(other: Any): Boolean

    Permalink

    Default equality of definitions.

    Default equality of definitions. Two definitions are equal if they have same elements.

    Definition Classes
    ThunkDefNode → Equals → AnyRef → Any
  17. def finalize(): Unit

    Permalink
    Attributes
    protected[java.lang]
    Definition Classes
    AnyRef
    Annotations
    @throws( classOf[java.lang.Throwable] )
  18. lazy val flatSchedule: Scalan.Schedule

    Permalink
    Definition Classes
    AstGraph
  19. lazy val freeVars: Seq[Scalan.Sym]

    Permalink

    Collect a set of symbols used in the graph but which are not part of its schedule.

    Collect a set of symbols used in the graph but which are not part of its schedule. If the graph represents a compound definition (Lambda, Thunk etc), then each item in freeVars is used in the body, but not part of it. Intersection of free vars with bound vars is empty.

    Definition Classes
    ThunkDefAstGraph
  20. final def getClass(): Class[_]

    Permalink
    Definition Classes
    AnyRef → Any
  21. def getDeps: Array[Scalan.Sym]

    Permalink

    Override to redefine how dependencies are computed.

    Override to redefine how dependencies are computed. For example, in core implementation this is overriden in Lambda and ThunkDef using freeVars.

    Attributes
    protected
    Definition Classes
    ThunkDefNode
  22. def globalUsagesOf(s: Scalan.Sym): Buffer[Scalan.Sym]

    Permalink
    Definition Classes
    AstGraph
  23. def hasManyUsages(s: Scalan.Sym): Boolean

    Permalink
    Definition Classes
    AstGraph
  24. def hasManyUsagesGlobal(s: Scalan.Sym): Boolean

    Permalink
    Definition Classes
    AstGraph
  25. lazy val hashCode: Int

    Permalink

    NOTE on structural equality implementation Every Def is assigned fresh nodeId in the constructor.

    NOTE on structural equality implementation Every Def is assigned fresh nodeId in the constructor. As result this ThunkDef instance will have unique nodeId. Thus, different ThunkDef instances will have different nodeIds and hence they are NOT equal.

    Definition Classes
    ThunkDefNode → AnyRef → Any
  26. def isBoundVar(s: Scalan.Sym): Boolean

    Permalink

    Checks the symbol is lambda bound.

    Checks the symbol is lambda bound.

    Definition Classes
    AstGraph
    Annotations
    @inline()
  27. def isIdentity: Boolean

    Permalink

    Whether this graph represents identity function.

    Whether this graph represents identity function.

    Definition Classes
    ThunkDefAstGraph
  28. final def isInstanceOf[T0]: Boolean

    Permalink
    Definition Classes
    Any
  29. final def isLocalDef(s: Scalan.Sym): Boolean

    Permalink
    Definition Classes
    AstGraph
    Annotations
    @inline()
  30. final def isLocalDefId(id: Int): Boolean

    Permalink
    Definition Classes
    AstGraph
    Annotations
    @inline()
  31. final def isRoot(s: Scalan.Sym): Boolean

    Permalink
    Definition Classes
    AstGraph
    Annotations
    @inline()
  32. def mirror(t: Scalan.Transformer): Scalan.Ref[Scalan.Thunk[A]]

    Permalink

    Clone this definition transforming all symbols using t.

    Clone this definition transforming all symbols using t. If new Def[A] is created, it is added to the graph with collapsing and rewriting. Can be overriden to implement node-specific mirroring (see MethodCall).

    t

    mapping of symbols to symbols (Ref[_] => Ref[_])

    returns

    symbol of the logical clone. If d don't contain symbols, then d.self is returned.

    Definition Classes
    Def
  33. final def ne(arg0: AnyRef): Boolean

    Permalink
    Definition Classes
    AnyRef
  34. final def nodeId: Int

    Permalink

    Unique id of the graph node assigned for each new instance using freshId generator.

    Unique id of the graph node assigned for each new instance using freshId generator. Doesn't participate in equality of this Def, thus definitions with different ids may still be structurally equal. Used to provide global Def numbering.

    Definition Classes
    Node
    Annotations
    @inline()
  35. final def notify(): Unit

    Permalink
    Definition Classes
    AnyRef
  36. final def notifyAll(): Unit

    Permalink
    Definition Classes
    AnyRef
  37. def productArity: Int

    Permalink
    Definition Classes
    ThunkDef → Product
  38. def productElement(n: Int): Any

    Permalink
    Definition Classes
    ThunkDef → Product
  39. def productIterator: Iterator[Any]

    Permalink
    Definition Classes
    Product
  40. def productPrefix: String

    Permalink
    Definition Classes
    Product
  41. def resultType: Scalan.Elem[Scalan.Thunk[A]]

    Permalink

    Type of a resulting value produced by the operation represented by this definition.

    Type of a resulting value produced by the operation represented by this definition. For example, if this definition represents application of +: (Int, Int) => Int operation then the result type is Int and resultType should return IntElement.

    Definition Classes
    ThunkDefDef
  42. val root: Scalan.Ref[A]

    Permalink

    graph node, which represents the result value of thunk forcing.

  43. lazy val rootIds: Buffer[Int]

    Permalink

    Extract identifies out of roots.

    Extract identifies out of roots.

    Definition Classes
    ThunkDefAstGraph
  44. val roots: Seq[Scalan.Sym]

    Permalink

    Terminal nodes of the graph.

    Terminal nodes of the graph. There are incoming, but no outgoing edges.

    Definition Classes
    ThunkDefAstGraph
  45. lazy val schedule: Scalan.Schedule

    Permalink

    Sequence of node references forming a schedule.

    Sequence of node references forming a schedule.

    Definition Classes
    AstGraph
  46. lazy val scheduleIds: Scalan.ScheduleIds

    Permalink

    Schedule represents a body of compound definition - topologically ordered sequence of nodes of the graph.

    Schedule represents a body of compound definition - topologically ordered sequence of nodes of the graph. It is implemented differently depending on node type.

    Definition Classes
    ThunkDefAstGraph
    See also

    Lambda, ThunkDef

  47. final def self: Scalan.Ref[Scalan.Thunk[A]]

    Permalink

    Reference to this definition created lazily on demand.

    Reference to this definition created lazily on demand.

    Definition Classes
    Def
  48. def show(config: GraphVizConfig): Unit

    Permalink
    Definition Classes
    AstGraph
  49. def show(emitMetadata: Boolean): Unit

    Permalink
    Definition Classes
    AstGraph
  50. def show(): Unit

    Permalink
    Definition Classes
    AstGraph
  51. final def syms: Array[Scalan.Sym]

    Permalink

    References to other nodes in this Def instance.

    References to other nodes in this Def instance. Note: This is different form deps for compound definitions like Lambda and ThunkDef.

    Definition Classes
    Node
  52. final def synchronized[T0](arg0: ⇒ T0): T0

    Permalink
    Definition Classes
    AnyRef
  53. def toString(): String

    Permalink

    User readable string representation of this definition.

    User readable string representation of this definition. (for debugging only)

    Definition Classes
    ThunkDefNode → AnyRef → Any
  54. def transform(t: Scalan.Transformer): Scalan.Def[Scalan.Thunk[A]]

    Permalink

    Create a copy of this definition applying the given transformer to all syms.

    Create a copy of this definition applying the given transformer to all syms.

    Definition Classes
    Def
  55. lazy val usageMap: Map[Int, Scalan.GraphNode]

    Permalink

    Symbol Usage information for this graph

    Symbol Usage information for this graph

    Definition Classes
    AstGraph
  56. def usagesOf(id: Int): Buffer[Int]

    Permalink

    Definition Classes
    AstGraph
  57. final def wait(): Unit

    Permalink
    Definition Classes
    AnyRef
    Annotations
    @throws( ... )
  58. final def wait(arg0: Long, arg1: Int): Unit

    Permalink
    Definition Classes
    AnyRef
    Annotations
    @throws( ... )
  59. final def wait(arg0: Long): Unit

    Permalink
    Definition Classes
    AnyRef
    Annotations
    @throws( ... )

Inherited from Scalan.Def[Scalan.Thunk[A]]

Inherited from Scalan.AstGraph

Inherited from Scalan.Node

Inherited from Product

Inherited from Equals

Inherited from AnyRef

Inherited from Any

Ungrouped