double Basket::total_receipt(ostream &os) const { double sum = 0.0; for (auto iter = items.cbegin(); iter != items.cend(); iter = items.upper_bound(*iter)) { sum += print_total(os, **iter, items.count(*iter)); } os << "Total Sale: " << sum << endl; return sum; }
double Basket::total() const { double sum = 0.0; for(const_iter i = items.begin() ; i != items.end() ; i = items.upper_bound(*i)) { sum += (*i)->net_price(items.count(*i)); } return sum; }
inline void converter<point_t>::knot_insertion(point_container_t& P, std::multiset<value_type>& knots, std::size_t order, value_type t) const { typedef typename point_t::value_type value_type; // copy knotvector for subscript [] access std::vector<value_type> kv_cpy(knots.begin(), knots.end()); // get parameter std::size_t p = order - 1; // degree std::size_t s = knots.count(t); // multiplicity std::size_t r = std::max(std::size_t(0), p - s); // number of insertions // get knotspan std::size_t k = std::distance(knots.begin(), knots.upper_bound(t)); std::size_t np = P.size(); // number of control points // start computation std::size_t nq = np + r; // helper arrays std::vector<point_t> Qw(nq); std::vector<point_t> Rw(p - s + 1); // copy unaffected points and transform into homogenous coords for (size_t i = 0; i <= k - p; ++i) { Qw[i] = P[i].as_homogenous(); } for (size_t i = k - s - 1; i <= np - 1; ++i) { Qw[i + r] = P[i].as_homogenous(); } // helper points for (size_t i = 0; i <= p - s; ++i) { Rw[i] = P[k - p + i - 1].as_homogenous(); } // do knot insertion itself std::size_t L = 0; for (std::size_t j = 1; j <= r; ++j) { L = k - p + j; for (std::size_t i = 0; i <= p - j - s; ++i) { value_type alpha = (t - kv_cpy[L + i - 1]) / (kv_cpy[i + k] - kv_cpy[L + i - 1]); Rw[i] = alpha * Rw[i + 1] + value_type(1.0 - alpha) * Rw[i]; } Qw[L - 1] = Rw[0]; Qw[k + r - j - s - 1] = Rw[p - j - s]; } // insert knots for (std::size_t i = 0; i < r; ++i) { knots.insert(t); } // copy new control points P.clear(); // transform back to euclidian space for (typename std::vector<point_t>::iterator i = Qw.begin(); i != Qw.end(); ++i) { P.push_back((*i).as_euclidian()); } }