| | |
| | | uint8_t pmPlacement[sizeof(PipeMaterial)];
|
| | | if (pm == nullptr)
|
| | | pm = new (pmPlacement) PipeMaterial;
|
| | | |
| | |
|
| | | if (elems.size() == 1)
|
| | | {
|
| | | elem_begin->gain(*pm);
|
| | |
| | | }
|
| | | else if (elems.size() == 2)
|
| | | {
|
| | | elem_begin->gain(*pm);
|
| | | elem_last->pay(*pm);
|
| | | if (elem_begin->gain(*pm))
|
| | | elem_last->pay(*pm);
|
| | | else
|
| | | return elem_begin;
|
| | | return elem_last;
|
| | | }
|
| | | else
|
| | | {
|
| | | elem_begin->gain(*pm);
|
| | | if (!elem_begin->gain(*pm))
|
| | | return elem_begin;
|
| | |
|
| | | bool lastRet = true;
|
| | | elem_vec_t::iterator iter = elems.begin();
|
| | | ++iter;
|
| | | elem_begin = *iter;
|
| | | while (elem_begin != elem_last)
|
| | | {
|
| | | if (lastRet && (lastRet = elem_begin->pay(*pm)) )
|
| | | lastRet = elem_begin->gain(*pm);
|
| | | else
|
| | | return elem_begin;
|
| | | |
| | | ++iter;
|
| | | elem_begin = *iter;
|
| | | elem_begin->pay(*pm);
|
| | | elem_begin->gain(*pm);
|
| | | }
|
| | |
|
| | | elem_last->pay(*pm);
|
| | | if (lastRet)
|
| | | elem_last->pay(*pm);
|
| | | return elem_last;
|
| | | }
|
| | |
|