| [/ |
| 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] |
| |