dart-sdk/pkg/lookup_map
2015-09-04 14:05:41 -07:00
..
lib Revert "Add version validation for LookupMap, also add unittest directly in LookupMap." 2015-09-04 14:05:41 -07:00
AUTHORS dart2js: add initial support for lookup-maps 2015-09-02 17:51:59 -07:00
CHANGELOG.md dart2js: add initial support for lookup-maps 2015-09-02 17:51:59 -07:00
LICENSE dart2js: add initial support for lookup-maps 2015-09-02 17:51:59 -07:00
pubspec.yaml Revert "Add version validation for LookupMap, also add unittest directly in LookupMap." 2015-09-04 14:05:41 -07:00
README.md dart2js: add initial support for lookup-maps 2015-09-02 17:51:59 -07:00

Lookup maps

This package contains the definition of LookupMap: a simple, but very restricted map. The map can only hold constant keys and the only way to use the map is to retrieve values with a key you already have. Expect for lookup, any other operation in Map (like forEach, keys, values, length, etc) is not available.

Constant LookupMaps are understood by dart2js and can be tree-shaken internally: if a key is not used elsewhere in the program, its entry can be deleted from the map during compilation without changing the program's behavior. Currently dart2js supports tree-shaking keys that are Type literals, and any const expression that can only be created with a const constructor. This means that primitives, Strings, and constant objects that override the == operator cannot be tree-shaken.

Examples

LookupMap is unlikely going to be useful for individual developers writing code by hand. It is mainly intended as a helper utility for frameworks that need to autogenerate data and associate it with a type in the program. For example, this can be used by a dependency injection system to record how to create instances of a given type. A dependency injection framework can store in a LookupMap all the information it needs for every injectable type in every library and package. When compiling a specific application, dart2js can tree-shake the data of types that are not used by the application. Similarly, this can also be used by serialization/deserialization packages that can store in a LookupMap the deserialization logic for a given type.