[Libreoffice] Simpler logging using a string format function
Michael Meeks
michael.meeks at suse.com
Mon Dec 12 09:43:14 PST 2011
Hi Lubos,
On Mon, 2011-12-12 at 16:30 +0100, Lubos Lunak wrote:
> I'd like to propose changes to the SAL_INFO etc. family of the new logging
> functions that would replace the somewhat strange usage
>
> SAL_INFO("foo", "string " << s << " of length " << n)
>
> with
>
> SAL_INFO("foo", "string %1 of length %2", s, n )
Oooh - nice ;-)
> The format-based usage uses a printf-like function that, unlike printf, is
> typesafe and extensible. If people would be interested, the function itself
> could be made public API (after all, there's a reason why printf is still
> popular even nowadays, despite all its shortcomings).
I'd love that personally; I'd love to have it as a way to construct
OUStrings as well - potentially rather more readable and more
efficient/faster than an OUStringBuffer for those cases where we can
calculate a precise allocation size from our arguments first. There are
a lot of call sites like:
avmedia/source/framework/mediaitem.cxx:
::rtl::OUStringBuffer buf(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(
"vnd.sun.star.Package:")));
buf.append(media);
buf.append(sal_Unicode('/'));
buf.append(filename);
o_rEmbeddedURL = buf.makeStringAndClear();
That are crying out to be one-liners with this sort of thing :-) in
fact, large numbers of rtl::OUStringBuffer usage sites could be made
more succinct, readable, maintainable and potentially more efficient
with this :-)
> Attached source code has a testing implementation of the format function and
> a simple logging macro. It still needs few final touches but it's generally
> ready. The templates may look scary at first, but it's rather simple, they
> are just making the function to take up to 9 arguments of each of the
> supported arguments and the template for return type is SFINAE[1].
We can (presumably) inline them - they all evaporate away. It seems
that it does indeed turn into a single function call. I imagine we
should put the virtual 'append' methods into a separate shared object
though.
> 1) Yes/no ?
I love it; Stephan ?
> 2) It take it SAL_INFO, being in sal, has to keep binary compatibility, which
> means we're stuck with the << usage if it stays that way in the 3.5 branch,
> and that I'd have to make this new way binary compatible in time for 3.5 if
> it's to replace it?
I suppose so :-)
> 3) What would 'in time for 3.5' mean in practice?
Tripple review at this stage - but, I think that's reasonably
achievable; you got one already.
> 5) For some of the features to work, it is necessary to build without
> gcc's -pedantic. I expect we already would generate some warnings if that was
> used anyway, wouldn't we ?
;-) seems more than likely. So - lovely work; I rather like the
solution (at least from an assembler perspective, from what I saw so
far). Incidentally, to compile:
g++ -S -DLINUX -DUNX -I/path/to/core/solver/unxlngi6.pro/inc/ /tmp/a.cxx
etc. I'll push it onto the TSC agenda in case we don't get consensus here.
ATB,
Michael.
--
michael.meeks at suse.com <><, Pseudo Engineer, itinerant idiot
More information about the LibreOffice
mailing list