ServerJS/API/set/ProposalK

From MozillaWiki
< ServerJS‎ | API
Jump to: navigation, search


/*** Set
    An unordered collection of unique values.

    Accepts:

    - optional ``values`` (may be ``undefined``, or any iterable object,
      by way of the polymorphic `toIter`)
    - optional custom ``hash`` relation.
    - optional custom ``eq`` binary equivalence relation.

    Inherits member functions from `Iterable`.
 
    `Set` operations operate in constant time best case,
    and linear for degenerate cases.

    If you insert an object in a set and modify that object
    in such a way that its ``hash`` result changes, it
    will be irrecoverable.
    Most other libraries enforce that only immutable
    objects should be inserted in sets for this reason,
    so be careful.

*/

    /*** insert
        inserts a value in the `Set`. 
        Position is not relevant.  Replaces
        an existing value if the value has the same
        `hash` key and is `eq` to an existing
        value.  The `hash` function and `eq` function
        can be overridden in the `Set` constructor.

         - `stateful`
         - `chainable`
    */

    /*** retrieve
        retrieves a value from the `Set` that has
        the same `hash` key and is `eq` to a given
        value.  `eq` and `hash` can be overridden
        in the `Set` constructor.

         - `stateless`
    */

    /**** remove
        removes a value from the `Set` if it has
        the same `hash` and is `eq` to the value.
        throws a `ValueError` if no matching value
        can be found.

         - `stateful`
         - `chainable`
    */

    /**** discard
        discards a value from the `Set` if it has
        the same `hash` and is `eq` to the value.
        Unlike `remove`, does not throw a `ValueError`
        if no matching value can be found.

         - `stateful`
         - `chainable`
    */

    /**** clear
        removes all values in this set.

         - `stateful`
         - `chainable`
    */

    /**** has
        returns whether a set contains a given value.
        uses `eq` and `hash` to attempt to find
        the value in the set.  These functions
        can be overridden in the `Set` constructor.
    */

    /**** find
        searches all of the values in set for one
        that is `eq` to a given value.  returns that
        value.  throws a `ValueError` if no value
        can be found.

         - accepts a value to find
         - accepts an optional override to the `eq` function

         - `stateless`
    */

    /**** toIter */

    /**** eq */

    /**** union
        augments itself with any values that exist in another
        iterable.

         - `stateful`
         - `chainable`
    */

    /**** intersect
         - `stateful`
         - `chainable`
    */

    /**** difference
         - `stateful`
         - `chainable`
    */

    /**** unioned
        returns all elements that are in itself and another iterable.

         - `stateless`
         - `chainable`
    */

    /**** intersected
        returns all values that are in
        this set and another.

         - `stateless`
         - `chainable`
    */

    /**** differenced
        returns the set of all values that are
        in this set but not another.

         - `stateless`
         - `chainable`
    */

    /**** symmetricDifferenced
        returns the set of all values that are exactly one
        set between itself and another.

         - `stateless`
         - `chainable`
    */

    /**** isSuperSet
        returns whether this set contains all of the values
        in a given container.

         - `stateless`
    */

    /**** isSubSet
        returns whether a given container contains all of
        this set's values.

         - `stateless`
    */

    /**** added
        alias of `unioned`

         - `stateless`
         - `chainable`
    */

    /**** add
        alias of `union`

         - `stateful`
         - `chainable`
    */

    /**** muled
        alias of `intersected`

         - `stateless`
         - `chainable`
    */

    /**** mul
        alias of `intersect`

         - `stateful`
         - `chainable`
    */

    /**** subed
        alias of `differenced`

         - `stateless`
         - `chainable`
    */

    /**** sub
        alias of `difference`

         - `stateful`
         - `chainable`
    */

    /**** and
        alias of `intersect`

         - `stateful`
         - `chainable`
    */

    /**** anded
        alias of `intersected`

         - `stateless`
         - `chainable`
    */

    /**** or
        alias of `union`

         - `stateful`
         - `chainable`
    */

    /**** ored
        alias of `unioned`

         - `stateless`
         - `chainable`
    */

    /**** xor
        alias of `symmetricDifferenced`

         - `stateful`
         - `chainable`
    */

    /**** xored
        alias of `symmetricDifferenced`

         - `stateless`
         - `chainable`
    */

/**
    Functions
    =========

    Functions that operate on sets, or arrays
    coercible to sets using the polymorphic
    `toSet` function.
*/

/*** toSet */
/*** insert */
/*** retrieve */
/*** remove */
/*** discard */
/*** clear */
/*** has */
/*** union */
/*** intersect */
/*** difference */
/*** symetricDifference */
/*** isSuperSet */
/*** isSubSet */