<html><head><meta http-equiv="Content-Type" content="text/html charset=utf-8"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class="">Make sense!<div class=""><br class=""></div><div class="">Can you also add doxygen to the new API?</div><div class=""><br class=""></div><div class="">— </div><div class="">Mehdi</div><div class=""><br class=""></div><div class=""><br class=""><div class=""><div><blockquote type="cite" class=""><div class="">On Sep 29, 2016, at 12:06 PM, Zachary Turner <<a href="mailto:zturner@google.com" class="">zturner@google.com</a>> wrote:</div><br class="Apple-interchange-newline"><div class=""><div dir="ltr" class="">I had a pair originally, but I found it more intuitive to refer to them in loops with the names "Index" and "Value" rather than "first" and "second".</div><br class=""><div class="gmail_quote"><div dir="ltr" class="">On Thu, Sep 29, 2016 at 12:05 PM Mehdi Amini <<a href="mailto:mehdi.amini@apple.com" class="">mehdi.amini@apple.com</a>> wrote:<br class=""></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><br class="gmail_msg">
> On Sep 29, 2016, at 11:23 AM, Zachary Turner <<a href="mailto:zturner@google.com" class="gmail_msg" target="_blank">zturner@google.com</a>> wrote:<br class="gmail_msg">
><br class="gmail_msg">
> I frequently find myself resorting to index based enumeration because ranged based fors do not allow you to access the index.<br class="gmail_msg">
<br class="gmail_msg">
Same here!!<br class="gmail_msg">
<br class="gmail_msg">
>   With llvm::enumerate(), you can write something like this:<br class="gmail_msg">
><br class="gmail_msg">
> for (auto X : enumerate(my_container)) {<br class="gmail_msg">
>   if (X.Index == 1)<br class="gmail_msg">
>     continue;<br class="gmail_msg">
>   printf("%d", X.Value);<br class="gmail_msg">
> }<br class="gmail_msg">
><br class="gmail_msg">
> It handles both const and non-const containers, so that for non-const containers you can modify the underlying sequence item (e.g. the `Value` member of the returned enumerator is a reference).<br class="gmail_msg">
<br class="gmail_msg">
I like the idea :)<br class="gmail_msg">
<br class="gmail_msg">
<br class="gmail_msg">
+public:<br class="gmail_msg">
+  template <typename V> struct result_pair {<br class="gmail_msg">
+    result_pair(std::size_t Index, V Value) : Index(Index), Value(Value) {}<br class="gmail_msg">
+<br class="gmail_msg">
<br class="gmail_msg">
Why not a std::pair?<br class="gmail_msg">
<br class="gmail_msg">
+    iterator &operator=(const iterator &RHS) {<br class="gmail_msg">
+      Iter = RHS;<br class="gmail_msg">
+      return *this;<br class="gmail_msg">
+    }<br class="gmail_msg">
+<br class="gmail_msg">
<br class="gmail_msg">
What about the Index here?<br class="gmail_msg">
<br class="gmail_msg">
<br class="gmail_msg">
<br class="gmail_msg">
—<br class="gmail_msg">
Mehdi<br class="gmail_msg">
<br class="gmail_msg">
</blockquote></div>
</div></blockquote></div><br class=""></div></div></body></html>