Boost logo

Boost :

Subject: Re: [boost] [string_algo] Documentation Complaint
From: Dave Abrahams (dave_at_[hidden])
Date: 2012-11-02 13:13:22


on Thu Nov 01 2012, John Bytheway <jbytheway+boost-AT-gmail.com> wrote:

> On 01/11/12 15:33, Dave Abrahams wrote:
>>
>> Wow, I found this documentation hard to use!
>>
>> I wanted to translate various 1-character substrings into new strings,
>> e.g. translate the TAB character ('\t') to its textual escaped
>> representation "\\t", and I went looking for an algorithm to do it.
>>
>> After 5 minutes of searching, I *think* the algorithm isn't there, but
>> I'm still not sure.
>
> I think replace_all_copy will do it
> <http://www.boost.org/doc/libs/1_51_0/doc/html/boost/algorithm/replace_all_copy.html>
> but it's not specifically targeted at replacing single characters, so
> may perform worse and/or be more cumbersome to use than something that was.
>
> Also, it only replaces one thing at a time. If you wanted to replace
> many different characters in one pass then you can use
> <http://www.boost.org/doc/libs/1_51_0/doc/html/boost/algorithm/find_format_copy.html>,
> but it will be quite cumbersome.

Actually find_format_all_copy. This took me hours to get right but it's
at least 75% phoenix's fault ;-)

#+begin_src c++
  using namespace boost::phoenix::placeholders;
  using namespace boost::phoenix;
  using namespace boost::phoenix::local_names;
  static const char chars_to_escape[] = "\\/\"\b\f\n\r\t";
  static const char repl_chars[] = "\\/\"bfnrt";

  boost::find_format_all_copy(
      rep,
      boost::token_finder(boost::is_any_of(chars_to_escape)),
      let ( _c = find(boost::as_array(chars_to_escape), arg1[0]) )[
          string("\\") + val(repl_chars)[_c - &chars_to_escape[0]]
      ]
  )
#+end_src

> (And, to add to your complaints: I
> wish the docs for that function linked to the docs for the Finder and
> Formatter concepts!).

Yes! Everywhere they're mentioned, they should be links!

>> I nearly went blind (well, not really, but it felt that way) looking at
>> http://www.boost.org/doc/libs/1_51_0/doc/html/string_algo/reference.html#header.boost.algorithm.string.replace_hpp
>> because there's no vertical whitespace. More importantly, there's *no
>> description of what any of these algorithms actually do*!
>
> Did you notice that you can click on the function names to get more
> detailed info?

Not until long after I wrote the email.

> This isn't wonderful for finding the algorithm you want, but there
> *is* a description of the algorithms, and the quick reference is there
> for browsing purposes.

Yeah, I eventually figured out how to use the docs. When we write docs,
we should do more to help people who are working under pressure,
though. Accessibility is really important.

-- 
Dave Abrahams
BoostPro Computing                  Software Development        Training
http://www.boostpro.com             Clang/LLVM/EDG Compilers  C++  Boost

Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk