Date: prev next · Thread: first prev next last
2012 Archives by date, by thread · List index



On Fri, 2012-01-13 at 14:15 +0100, Stephan Bergmann wrote:
On 01/13/2012 11:23 AM, Michael Meeks wrote:
    Oooh ! :-) it looks really rather nice; how efficient is the compiled
representation ? hopefully much more so than the big chunks of in-lined
UNO-ness that existing code uses :-)

It still uses UNO to access configmgr, but through a simplified 
interface (new com.sun.star.configuration.{ReadOnly,ReadWrite}Access 
singletons).  The main benefit (besides shorter client code) is type 
safety

        Yep - it's pretty awesome - it's also far less verbose than many of the
configmgr access sites I've seen:

officecfg::Office::Common::AsianLayout::CompressCharacterDistance::get(comphelper::getProcessComponentContext());

        vs.

        css::uno::Any aVal = ::comphelper::ConfigurationHelper::readDirectKey(
                                xSMGR,
                                
::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("org.openoffice.Office.Common/")),
                                ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Misc")),
                                ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("MaxOpenDocuments")),
                                ::comphelper::ConfigurationHelper::E_READONLY);
        sal_Int32 nCount;
        aVal >>= nCount;
        etc.

        So really nice - and has no visible operator overload too; I love
it :-)

 -- neither can there be misspellings in the paths of 
configuration nodes nor confusion in the values that can be read or 
written for those nodes.

        Sure - and I imagine there is a really serious error if the key is not
there or we get an exception reading it, that we can un-conditionally
dump something nice out for to the console when we get to it :-)

UNO *is* the tool to make functionality available to different 
languages, to extensions, and to scripting facilities.

        Sure - of course. This API, on the other hand, is a C++ syntactic
sugar, so surely we can do things better in our native language
perhaps ? at least I think taking an efficiency hit to allow the
possibility of a later non-C++ configmgr implementation is unlikely to
pay dividends.

        I'd not seen any of this, so I'm just looking for the first time; I
have a number of queries (given that this will/should be used
everywhere).

* reading:
        workdir/unxlngi6.pro/CustomTarget/officecfg/registry/Office/Common.hxx

        I love the:
        namespace officecfg { namespace Office { namespace Common {

        ie. we skipped the org and the OpenOffice - which is cool; good
        to get over the over-namespacing legacy. My question would be -
        do we even need the 'Office' ? ;-) but ... it's prolly fine for
        now.

* optimising
        Did I mention that I love the ability to transparently optimise
        this later as a major feature of this :-)

* string construction:

        struct UseOldExport: public unotools::ConfigurationProperty<UseOldExport, bool> {
            static rtl::OUString path() { return 
rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("/org.openoffice.Office.Common/InternalMSExport/UseOldExport"));
 }

        Since we're going to get a lot of these inserted, it might be
        rather a good plan to split a path() method from a key()
        method so the compiler can share the:
                /org.openoffice.Office.Common/.../
        for all the keys; that makes the call site slightly larger, but
        the resulting binary potentially rather smaller :-)

        it'd of course also be rather nice to keep the strings
        as const char *'s until we get them into some non-inlined code
        hiding that construction stuff inside some
        static ConfigurationWrapper::getPropertyValue(...) type method ?
        That way we get a single string (buffer) construction to build
        the path instead of one per call-site.

* XComponentContext-age ...
            static ConfigurationWrapper const & get(
                com::sun::star::uno::Reference< com::sun::star::uno::XComponentContext >
                    const & context);

        Do we really need to pass this parameter to these methods ?

        We have a single configmr instance, it seems unlikely that we
        really need anything to help us find it surely ? either
        configmgr is there, or the world goes bang :-)

        If we're desparate to have it (it'd be nice to know what for),
        then we could we have a default-to-NULL pointer to a reference 
        there ?


        And that's about it at first glance. Most of these details can be
hammered out later though, so it's mainly the API that's interesting -
so - just the XComponentContext clutter (?).

        Personally, I'd love to see direct linking to configmgr so we don't
need the component context, and also some punch-throughs, so we don't
need the UNO API bits that force us to allocate OUStrings and Any's etc.

        Anyhow - we should clearly create an EasyHack to drive this goodness
all through the code-base, I suspect it's highly susceptible to
wide-spread volunteer effort. Are you happy enough with it yet to do
that ?

        Great work !

                Michael.

-- 
michael.meeks@suse.com  <><, Pseudo Engineer, itinerant idiot


Context


Privacy Policy | Impressum (Legal Info) | Copyright information: Unless otherwise specified, all text and images on this website are licensed under the Creative Commons Attribution-Share Alike 3.0 License. This does not include the source code of LibreOffice, which is licensed under the Mozilla Public License (MPLv2). "LibreOffice" and "The Document Foundation" are registered trademarks of their corresponding registered owners or are in actual use as trademarks in one or more countries. Their respective logos and icons are also subject to international copyright laws. Use thereof is explained in our trademark policy.