<div dir="ltr"><br><div class="gmail_extra"><br><div class="gmail_quote">On Sun, Mar 19, 2017 at 3:28 PM, Axel Davy <span dir="ltr"><<a href="mailto:axel.davy@ens.fr" target="_blank">axel.davy@ens.fr</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
<div bgcolor="#FFFFFF">
<div class="gmail-m_6555702049878739804moz-cite-prefix">I'm not familiar with std::transform,
but it looks like one element in the source<br>
can only give one element in the destination, whereas here you can
have one element<br>
decomposing into several ones.</div></div></blockquote><div><br></div><div>std::transform does not require the input == the output type.</div><div><br></div><div>It only requires that assignment of the output iterator takes the type</div><div><br></div><div>Thus, the following should work:<br><br></div><div>std::transform(Regs.begin(), Regs.end(), vector_inserter(Result), [&] (const RegisterMaskPair &RegPair)</div><div>{<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">return getPairsForReg(RegPair.RegUnit, RegPair.LaneMask)</blockquote></div><div>});</div><div><br></div><div><div><div><br></div></div></div><div>Where vector_inserter is defined as:<br><div>class vector__inserter</div><div> : public std::iterator<std::output_iterator_tag, void, void, void, void> {</div><div>private:</div><div> SmallVectorImpl<RegisterMaskPair> &Result;<br><br></div><div>public:</div><div> explicit op_inserter(SmallVectorImpl<RegisterMaskPair> &Result) : Result(Result) {}<br></div><div><br></div><div> op_inserter &operator=(const SmallVectorImpl<RegisterMaskPair> &Val) {</div><div> Result.insert(Result.end(), Val.begin(), Val.end())</div><div> return *this;</div><div> }</div><div> vector_inserter &operator*() { return *this; }</div><div> vector_inserter &operator++() { return *this; }</div><div> vector_inserter &operator++(int) { return *this; }</div><div>};</div></div><div><br></div><div><br></div><div><br></div><div><br></div><div><br></div></div></div></div>