[apparmor] [patch 06/18] parser: replace reverse iterator [resend]
Steve Beattie
steve at nxnw.org
Fri Jan 24 19:33:07 UTC 2014
On Fri, Jan 24, 2014 at 02:40:59AM -0800, John Johansen wrote:
> On 01/16/2014 02:06 PM, Steve Beattie wrote:
> > As suggested by Seth Arnold, we can use string::find_last_not_of()
> > instead of using C++'s hideous reverse iterators.
> >
> hrmmm honestly I don't think it is much different but
Well, my griping comment about C++'s reverse iterator was due to
str.erase() accepting only an iterator type, not a reverse_iterator,
necessitating the base() call, as well as the fact that the base
iterator, when dereferenced, points at the element preceding it,
hence the a priori decrement of the iterator before passing to
str.erase(). So a different solution with fewer hidden land mines that
captures the intent a little more explicitly is an improvement to me.
> Acked-by: John Johansen <john.johansen at canonical.com>
Thanks for all the reviews!
> > ===================================================================
> > --- a/parser/parser_variable.c
> > +++ b/parser/parser_variable.c
> > @@ -137,11 +137,11 @@ void free_var_string(struct var_string *
> >
> > static void trim_trailing_slash(std::string& str)
> > {
> > - for (std::string::reverse_iterator rit = str.rbegin();
> > - rit != str.rend() && *rit == '/'; ++rit) {
> > - /* yuck, reverse_iterators are ugly */
> > - str.erase(--rit.base());
> > - }
> > + std::size_t found = str.find_last_not_of('/');
> > + if (found != std::string::npos)
> > + str.erase(found + 1);
> > + else
> > + str.clear(); // str is all '/'
> > }
--
Steve Beattie
<sbeattie at ubuntu.com>
http://NxNW.org/~steve/
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 836 bytes
Desc: Digital signature
URL: <https://lists.ubuntu.com/archives/apparmor/attachments/20140124/a34d9231/attachment.pgp>
More information about the AppArmor
mailing list