d1e62f9ab7
[SVN r67527]
203 lines
7.1 KiB
Plaintext
203 lines
7.1 KiB
Plaintext
[/
|
|
Copyright (c) 2008-2010 Joachim Faulhaber
|
|
|
|
Distributed under the Boost Software License, Version 1.0.
|
|
(See accompanying file LICENSE_1_0.txt or copy at
|
|
http://www.boost.org/LICENSE_1_0.txt)
|
|
]
|
|
|
|
|
|
[/ //= Subtraction ============================================================]
|
|
[section Subtraction]
|
|
|
|
[section Synopsis]
|
|
|
|
[table
|
|
[[Subtraction] [__ch_itvs__][__ch_itv_sets__][__ch_itv_maps__][__ch_ele_sets__][__ch_ele_maps__]]
|
|
[[`T& T::subtract(const P&)`] [ ] [__ei] [__bp] [ ] [__b] ]
|
|
[[`T& subtract(T&, const P&)`] [ ] [__ei] [__bp] [__e] [__b] ]
|
|
|
|
[[`T& operator -=(T&, const P&)`] [ ] [__eiS][__eiS __bpM][__es] [__bm] ]
|
|
[[`T operator - (T, const P&)`] [ ] [__eiS][__eiS __bpM][__es] [__bm] ]
|
|
|
|
[[`T left_subtract(T, const T&)`] [1] [ ] [ ] [ ] [ ] ]
|
|
[[`T right_subtract(T, const T&)`] [1] [ ] [ ] [ ] [ ] ]
|
|
]
|
|
|
|
Functions and operators that implement ['*Subtraction*] on *icl* objects
|
|
are given in the table above.
|
|
|
|
[table
|
|
[[] [Description of Subtraction]]
|
|
[[`Sets`][Subtraction on Sets implements ['*set difference*]]]
|
|
[[`Maps`][Subtraction on Maps implements a ['*map difference*] function similar to /set difference/.
|
|
If, on subtraction of an element value pair `(k,v)` it's key `k` is in the map
|
|
already, the subtraction function is propagated to the associated value.
|
|
On the associated value an aggregation is performed, that reverses
|
|
the effect of the corresponding addition function.
|
|
|
|
Find more on
|
|
[link boost_icl.concepts.aggrovering ['subtractability of maps]]
|
|
and related
|
|
[link boost_icl.semantics.maps ['semantic issues]]
|
|
following the links.
|
|
|
|
]]
|
|
]
|
|
|
|
[endsect][/ Synopsis]
|
|
|
|
|
|
|
|
[section Functions][/ Subtraction]
|
|
|
|
The admissible combinations of types for subtraction functions
|
|
can be summarized in the
|
|
['*overload table*] below:
|
|
|
|
``
|
|
// overload table for T\P| e i b p
|
|
T& T::subtract(const P&) ---+--------
|
|
T& subtract(T&, const P&) s | s
|
|
m | m
|
|
S | S S
|
|
M | M M
|
|
``
|
|
|
|
The next table contains complexity characteristics for `subtract`.
|
|
|
|
[table Time Complexity for function subtract on icl containers
|
|
[[`T& T::subtract(const P&)`\n
|
|
`T& subtract(T&, const P&)`] [__ch_dom_t__][__ch_itv_t__][__ch_dom_mp_t__][__ch_itv_mp_t__]]
|
|
[[__icl_set__] [__Olgn__] [] [] [] ]
|
|
[[__icl_map__] [__Olgn__] [] [__Olgn__] [] ]
|
|
[[__itv_sets__] [__Olgn__] [__a_Olgn__] [] [] ]
|
|
[[__itv_maps__] [__Olgn__] [__On__] [__Olgn__] [__On__] ]
|
|
]
|
|
|
|
[endsect][/ Member function Subtraction]
|
|
|
|
|
|
[section Inplace operators][/ Subtraction]
|
|
|
|
As presented in the overload tables for `operator -=`
|
|
more type combinations are provided for subtraction than for
|
|
addition.
|
|
|
|
``
|
|
// overload tables for element containers: interval containers:
|
|
T& operator -= (T&, const P&) -= | e b s m -= | e i b p S M
|
|
---+-------- ---+------------
|
|
s | s s S | S S S
|
|
m | m m m m M | M M M M M M
|
|
``
|
|
|
|
Subtraction provides the /reverse/ operation
|
|
of an addition for these overloads,
|
|
|
|
``
|
|
// Reverse addition -= | e b s m -= | e i b p S M
|
|
---+-------- ---+------------
|
|
s | s s S | S S S
|
|
m | m m M | M M M
|
|
``
|
|
|
|
[*and] you can erase parts of __icl_maps__ or __itv_maps__
|
|
using
|
|
/key values/, /intervals/ or /element or interval sets/
|
|
using these overloads:
|
|
|
|
``
|
|
// Erasure by key objects -= | e b s m -= | e i b p S M
|
|
---+-------- ---+------------
|
|
s | s s S | S S S
|
|
m | m m M | M M M
|
|
``
|
|
|
|
On Sets both function groups fall together
|
|
as ['*set difference*].
|
|
|
|
Complexity characteristics for inplace subtraction operations are
|
|
given by the next tables where
|
|
``
|
|
n = iterative_size(y);
|
|
m = iterative_size(x); //if P is a container type
|
|
``
|
|
|
|
[table Time Complexity for inplace Subtraction on element containers
|
|
[[`T& operator -= (T&, const P&)`][__ch_dom_t__][__ch_dom_mp_t__][__ch_icl_set__][__ch_icl_map__]]
|
|
[[__icl_set__] [__Olgn__] [] [__Omlgn__] [] ]
|
|
[[__icl_map__] [__Olgn__] [__Olgn__] [__Omlgn__] [__Omlgn__] ]
|
|
]
|
|
|
|
|
|
[table Time Complexity for inplace Subtraction on interval containers
|
|
[[`T& operator -= (T&, const P&)`][__ch_dom_t__][__ch_itv_t__][__ch_dom_mp_t__][__ch_itv_mp_t__][__ch_itv_sets__][__ch_itv_maps__]]
|
|
[[interval_sets] [__Olgn__] [__a_Olgn__] [] [] [__Omlgnpm__] [] ]
|
|
[[interval_maps] [__Olgn__] [__a_Olgn__] [__Olgn__] [__On__] [__Omlgnpm__] [__Omlgnpm__] ]
|
|
]
|
|
|
|
[endsect][/ Inplace operators Subtraction]
|
|
|
|
|
|
[section Infix operators][/-Subtraction]
|
|
|
|
The admissible overloads for the infix
|
|
/subtraction/ `operator -`
|
|
which is a non commutative
|
|
operation
|
|
is given by the next overload table.
|
|
|
|
``
|
|
// overload tables for - | e b s m - | e i b p S M
|
|
T operator - (T, const P&) ---+-------- ---+------------
|
|
s | s s S | S S S
|
|
m | m m m m M | M M M M M M
|
|
``
|
|
[endsect][/- Infix operator Subtraction]
|
|
|
|
|
|
[section Subtraction on Intervals]
|
|
|
|
[table
|
|
[[['*Subtraction*]] [Types] [Description] ]
|
|
|
|
[[`T left_subtract(T right, const T& left_minuend)`] [__i]
|
|
[subtract `left_minuend` from the interval `right` on it's left side.
|
|
``
|
|
right_over = left_subtract(right, left_minuend);
|
|
... d) : right
|
|
... c) : left_minuend
|
|
[c d) : right_over
|
|
``
|
|
] ]
|
|
[[`T right_subtract(T left, const T& right_minuend)`] [__i]
|
|
[subtract `right_minuend` from the interval `left` on it's right side.
|
|
``
|
|
left_over = right_subtract(left, right_minuend);
|
|
[a ... : left
|
|
[b ... : right_minuend
|
|
[a b) : left_over
|
|
``
|
|
] ]
|
|
]
|
|
|
|
[endsect][/ Subtraction on Intervals]
|
|
|
|
|
|
['*See also . . .*]
|
|
[table
|
|
[]
|
|
[[[link boost_icl.function_reference.addition ['*Addition*]] ]]
|
|
[[[link boost_icl.function_reference.erasure ['*Erasure*]] ]]
|
|
]
|
|
['*Back to section . . .*]
|
|
[table
|
|
[]
|
|
[[[link function_synopsis_table ['*Function Synopsis*]] ]]
|
|
[[[link boost_icl.interface ['*Interface*]] ]]
|
|
]
|
|
|
|
[endsect][/ Subtraction]
|
|
|