
committed by
Matias Niemelä

parent
99711b12f9
commit
e44f69c387
@ -16,31 +16,24 @@ import {LView, TData, TView} from './view';
|
||||
|
||||
|
||||
/**
|
||||
* LNodeFlags corresponds to the LNode.flags property. It contains information
|
||||
* on how to map a particular set of bits in LNode.flags to the node type, directive
|
||||
* count, or directive starting index.
|
||||
*
|
||||
* For example, if you wanted to check the type of a certain node, you would mask
|
||||
* node.flags with TYPE_MASK and compare it to the value for a certain node type. e.g:
|
||||
*
|
||||
*```ts
|
||||
* if ((node.flags & LNodeFlags.TYPE_MASK) === LNodeFlags.Element) {...}
|
||||
*```
|
||||
* LNodeType corresponds to the LNode.type property. It contains information
|
||||
* on how to map a particular set of bits in LNode.flags to the node type.
|
||||
*/
|
||||
export const enum LNodeFlags {
|
||||
export const enum LNodeType {
|
||||
Container = 0b00,
|
||||
Projection = 0b01,
|
||||
View = 0b10,
|
||||
Element = 0b11,
|
||||
ViewOrElement = 0b10,
|
||||
SIZE_SKIP = 0b100,
|
||||
SIZE_SHIFT = 2,
|
||||
INDX_SHIFT = 12,
|
||||
TYPE_MASK = 0b00000000000000000000000000000011,
|
||||
SIZE_MASK = 0b00000000000000000000111111111100,
|
||||
INDX_MASK = 0b11111111111111111111000000000000
|
||||
}
|
||||
|
||||
/**
|
||||
* TNodeFlags corresponds to the TNode.flags property. It contains information
|
||||
* on how to map a particular set of bits to the node's first directive index
|
||||
* (with INDX_SHIFT) or the node's directive count (with SIZE_MASK)
|
||||
*/
|
||||
export const enum TNodeFlags {INDX_SHIFT = 12, SIZE_MASK = 0b00000000000000000000111111111111}
|
||||
|
||||
/**
|
||||
* LNode is an internal data structure which is used for the incremental DOM algorithm.
|
||||
* The "L" stands for "Logical" to differentiate between `RNodes` (actual rendered DOM
|
||||
@ -58,17 +51,8 @@ export const enum LNodeFlags {
|
||||
* instructions.
|
||||
*/
|
||||
export interface LNode {
|
||||
/**
|
||||
* This number stores three values using its bits:
|
||||
*
|
||||
* - the type of the node (first 2 bits)
|
||||
* - the number of directives on that node (next 10 bits)
|
||||
* - the starting index of the node's directives in the directives array (last 20 bits).
|
||||
*
|
||||
* The latter two values are necessary so DI can effectively search the directives associated
|
||||
* with a node without searching the whole directives array.
|
||||
*/
|
||||
flags: LNodeFlags;
|
||||
/** The type of the node (see LNodeFlags) */
|
||||
type: LNodeType;
|
||||
|
||||
/**
|
||||
* The associated DOM node. Storing this allows us to:
|
||||
@ -217,6 +201,17 @@ export interface LProjectionNode extends LNode {
|
||||
* see: https://en.wikipedia.org/wiki/Flyweight_pattern for more on the Flyweight pattern
|
||||
*/
|
||||
export interface TNode {
|
||||
/**
|
||||
* This number stores two values using its bits:
|
||||
*
|
||||
* - the number of directives on that node (first 12 bits)
|
||||
* - the starting index of the node's directives in the directives array (last 20 bits).
|
||||
*
|
||||
* These two values are necessary so DI can effectively search the directives associated
|
||||
* with a node without searching the whole directives array.
|
||||
*/
|
||||
flags: TNodeFlags;
|
||||
|
||||
/** The tag name associated with this node. */
|
||||
tagName: string|null;
|
||||
|
||||
|
Reference in New Issue
Block a user