CEP 29 - Packaging of Materials¶
- CEP:
29
- Title:
Packaging of Materials
- Last-Modified:
2024-03-14
- Author:
Katie Mummah <mummah@wisc.edu>
- Status:
Draft
- Type:
Standards Track
- Created:
Paul Wilson
Abstract¶
For a number of real world applications (e.g. shipping), materials need to be packaged in specific ways. This CEP introduces the concept of a Package that can be applied to a material object to support such use cases.
Characteristics of a Package¶
Each package will have the following characteristics defined by the user in the input file:
name : a human-readable name for the package type
fill_min : the minimum quantity of material allowed in that package (default: eps())
fill_max : the maximum quantity of material allowed in the package (default: 1e299)
- strategythe strategy for filling multiple packages, e.g.
“first” : fill each package to the maximum before adding another package
“equal” : fill all packages with an equal quantity
Each package will also be assigned a unique integer id when it is first created. The default package has id = 1 and represents an unpackaged material. Generally, the user will not need to be aware of the id.
User-Definition of Packages¶
The input file grammar is extended to support the definition of a list of packages at the top level of the input file, similar to recipes.
Packages are loaded into a map of package names to Package pointers in the Context. The Context has methods to get a particular package based on its name or its id.
Applying Packages¶
All Resource`s are extended to have an additional integer `package_id_ that refers to the unique integer identifier of the package that currently contains that Resource object. By default, all `Resource`s are unpackaged (id = 1).
When an unpackaged Resource is placed in a package, the packaging strategy is consulted to determine how many packages are required. In some cases of an equal filling strategy, it may be impossible to load a given quantity of material into packages. Otherwise, the original Resource object is divided into multiple objects with the package appropriately defined.
Resource Buffer Behaviors¶
A new behavior is defined for `ResBuf`s to optionally impose unpackaging of `Resource`s as they are pushed into a resource buffer. Similarly, a new behavior is defined to optionally package materials as they are popped out of a resource buffer.