[[b2.reference.class.property-set]]
= Class property-set

Class for storing a set of properties.

[source,jam]
----
class property-set {
    rule raw ( )
    rule str ( )
    rule propagated ( )
    rule add ( ps )
    rule add-raw ( properties * )
    rule refine ( ps )
    rule get ( feature )
}
----

There is 1<->1 correspondence between identity and value. No two
instances of the class are equal. To maintain this property, the
'property-set.create' rule should be used to create new instances.
Instances are immutable.

--
1. `rule raw ( )`
+
Returns a Jam list of the stored properties.

2. `rule str ( )`
+
Returns the string representation of the stored properties.

3. `rule propagated ( )`
+
Returns a link:#b2.reference.class.property-set[property-set]
containing all the
link:#b2.reference.features.attributes.propagated[propagated]
properties in this
link:#b2.reference.class.property-set[property-set].

4. [[b2.reference.class.property-set.add]] `rule add ( ps )`
+
Returns a new link:#b2.reference.class.property-set[property-set]
containing the union of the properties in this
link:#b2.reference.class.property-set[property-set] and in `ps`.
+
NOTE: If `ps` contains non-free properties that should override the values in
this object, use link:#b2.reference.class.property-set.refine[refine]
instead.

5. `rule add-raw ( properties * )`
+
Link link:#b2.reference.class.property-set.add[add], except that it
takes a list of properties instead of a
link:#b2.reference.class.property-set[property-set].

6. [[b2.reference.class.property-set.refine]] `rule refine ( ps )`
+
Refines properties by overriding any non-free and non-conditional
properties for which a different value is specified in `ps`. Returns the
resulting link:#b2.reference.class.property-set[property-set].

7. `rule get ( feature )`
+
Returns all the values of `feature`.
--
