an experiment to see how useful a strong_int template works out
Change-Id: Ib77700350f0fa3b018a1926233adf7a40d728d16
Reviewed-on: https://gerrit.libreoffice.org/34072
Tested-by: Jenkins <ci@libreoffice.org>
Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
...where Coverity doesn't reveal which instantiation of the templated code it is
complaining about, but it must be ScRefFlags (sc/inc/address.hxx), which has
underlying type sal_uInt16 and a mask of 0xFFFF.
Change-Id: If0abd195885acdffb3c61cdab88d7a2c87c00c4f
...so rename to o3tl::tryAccess to make it more obvious that the returned
proxy points into the internals of the given Any, and forbid calling
o3tl::tryAccess on a temporary
Change-Id: Ia412c6b2b06693811b9b7f0076a08bbf97142df9
* Ensure tryGet<XFoo> (instead of tryGet<css::uno::Reference<XFoo>>) doesn't
compile.
* Add forceGet (as discussed at 0d7c5823124696f80583ac2a5f0e28f329f6f786 "New
o3tl::try/doGet to obtain value from Any", to be used momentarily).
Change-Id: I57eb6ef18a6ab0d52bb26df7eb4e51b485fc83ed
...in an attempt to reduce usage of type-unsafe
void const * css::uno::Any::getValue()
These new functions are often more convenient to use than the existing ">>=" and
Any::get<T>. Note how they are careful to provide a pointer directly into the
given Any, instead of creating temporaries.
As an example, replaced most calls of getValue across xmloff:
* Cases that first check for a specific type (via getValueType etc.) and then
call getValue can instead call tryGet. (But beware that tryGet supports some
conversions, which a check for a specific type may have missed---either
intentionally or by accident. Also beware the somewhat common idiom of
checking for TypeClass_ENUM and then using getValue to obtain a sal_Int32;
this cannot be replaced with a call to tryGet.)
* Cases that seem confident that the Any is of the correct type when calling
getValue (but apparently are confident due to some higher-layer protocol, as
the surrounding code does not do any checking via getValueType or similar) can
instead call doGet. It throws an exception if it turns out the confidence
wasn't warranted. (Many of the existing calls that directly dereferenced the
return value of getValue as sal_Bool look suspicious, in that the author might
have thought the given code would also cover a VOID Any---which technically it
even would have happened to do. If any RuntimeExceptions thrown from these
doGet calls start to crop up, these changes need to be revisited. Some may
even be rewritten as uses of ">>=". But at least "make check" did not show
any such problems. Also note that casting the value obtained from getValue to
any css::uno::Reference<X> with X being anything but the base
css::uno::XInterface was always prone to producing a bad pointer, in case the
interface actually stored in the Any derived from X via multiple inheritance.)
* Should there ever be cases where an Any is known to be of the requested type,
some additional forceGet could be introduced (which would assert instead of
throwing an exception).
Change-Id: I2d8739e86314eff73abfcafe01d806f5bc5c34db
These aren't used any more, and the C++11 std equivalents don't use
get_pointer() overloads.
Change-Id: Ib97a6a595863e21a1621c63709ea2b28f6550fde
Reviewed-on: https://gerrit.libreoffice.org/24982
Tested-by: Jenkins <ci@libreoffice.org>
Reviewed-by: Michael Stahl <mstahl@redhat.com>
using an idea from dtardon:
<dtardon> noelgrandin, hi. could you try to run the unusedmethods clang
plugin with "make build-nocheck"? that would catch functions that are
only used in tests. e.g., i just removed the whole o3tl::range class,
which has not been used in many years, but htere was a test for it...
<noelgrandin> dtardon, interesting idea! Sure, I can do that.
Change-Id: I5653953a426a2186a1e43017212d87ffce520387
Reviewed-on: https://gerrit.libreoffice.org/22041
Reviewed-by: Noel Grandin <noelgrandin@gmail.com>
Tested-by: Noel Grandin <noelgrandin@gmail.com>
Add o3tl::make_shared_array() to create the shared_ptr with the right
deleter.
The main difference then is that shared_array has operator[], but this
code didn't even use it.
Change-Id: I500ffc2f92b99c2a3924c0cdcdaa101956b69add
...at least from "g++ (GCC) 5.1.1 20150618 (Red Hat 5.1.1-4)" with
--disable-debug, when a namespace-scope const variable with a "complex"
initializer declared in an include file remains unused.
Avoid that warning via SAL_CONSTEXPR, which in turn requires large parts of
o3tl::is_typed_flags to be SAL_CONSTEXPR, which in turn requires a new
HAVE_CXX14_CONSTEXPR to allow assert in constexpr functions, which in turn
requires using -std=c++14 instead of -std=c++11 where available, which in turn
(a) requires to /not/ use -std=c++14 if it would run into a bug between Clang
and libstdc++ discussed at <https://llvm.org/bugs/show_bug.cgi?id=24115>
"llvm-nm fails to build with gcc 5.1's libstdc++" (and which hits us in
sfx2/source/control/thumbnailview.cxx), and (b) requires a new
HAVE_CXX14_SIZED_DEALLOCATION to work around GCC 5.1 -Werror=sized-deallocation
(where Clang >= 3.7 only supports C++14 sized deallocation when explictly
enabled via -fsized-deallocation, btw).
This effectively reverts ff6462e6307e6924dc6c8178043ae9032f4b4152 "avoid unused
variable warning:" again.
Change-Id: I424e3561452a3e6d8c8a9604d6c737cab49840c4
Reviewed-on: https://gerrit.libreoffice.org/18918
Reviewed-by: Stephan Bergmann <sbergman@redhat.com>
Tested-by: Stephan Bergmann <sbergman@redhat.com>
(the original ones would never have been picked due to how template argument
deduction works)
Change-Id: I5a08c763d721d8e11b5a10af2344a6a24bb0b9b2
Reviewed-on: https://gerrit.libreoffice.org/18583
Reviewed-by: Stephan Bergmann <sbergman@redhat.com>
Tested-by: Stephan Bergmann <sbergman@redhat.com>
Remove boost dependencies from ::o3tl::cow_wrapper, and add
the necessary includes to files including checked_delete and
noncopyable that do not already include the necessary files.
Change-Id: Iedae4232002792724226829a5d5cf9d16ffd0686
Reviewed-on: https://gerrit.libreoffice.org/18125
Reviewed-by: Thorsten Behrens <Thorsten.Behrens@CIB.de>
Tested-by: Thorsten Behrens <Thorsten.Behrens@CIB.de>
Add unit tests to cow_wrapper for the move ctor and move assignment.
Change-Id: I82a5886ca7ae110985c7202125699cf95b6466d8
Reviewed-on: https://gerrit.libreoffice.org/18108
Reviewed-by: Thorsten Behrens <Thorsten.Behrens@CIB.de>
Tested-by: Thorsten Behrens <Thorsten.Behrens@CIB.de>
After the cleanup, the stuff there really stands on its own (and the
remaining usage of select1st/2nd is more descriptive than lambdas).
Change-Id: I0aba131d5dc550189f8130d167dc94167e404540
Reviewed-on: https://gerrit.libreoffice.org/17806
Reviewed-by: Thorsten Behrens <Thorsten.Behrens@CIB.de>
Tested-by: Thorsten Behrens <Thorsten.Behrens@CIB.de>
Replace the use of project2nd in basebmp with a specialized functor
similar to what is seen in paletteformats.hxx and
pixelformatadapters.hxx. There should be no side effects due to this
change.
Change-Id: I1bbd723931e41986542e92bac773bbea68cfe5bd
Reviewed-on: https://gerrit.libreoffice.org/17660
Tested-by: Jenkins <ci@libreoffice.org>
Reviewed-by: David Tardon <dtardon@redhat.com>
Tested-by: David Tardon <dtardon@redhat.com>
Clean up o3tl/compat_functional.hxx select1st/select2nd. Remove the
structs inheritance from the now deprecated unary_function. Remove
project1st, as it is not used.
Change-Id: I60c0f30c4b87417a331a4b38f62993cc3d1c9a51
Reviewed-on: https://gerrit.libreoffice.org/17625
Tested-by: Jenkins <ci@libreoffice.org>
Reviewed-by: Thorsten Behrens <Thorsten.Behrens@CIB.de>
, fixing a couple of bugs in the process
Change-Id: I40f932deecbcc99dff9aa13dd1882c7487e7fa8e
Reviewed-on: https://gerrit.libreoffice.org/17411
Tested-by: Jenkins <ci@libreoffice.org>
Reviewed-by: Noel Grandin <noelgrandin@gmail.com>
It just includes a bunch of other boost headers; mostly we need
boost/noncopyable.hpp so include that directly.
This eliminates 831 MB(!) of boost/preprocessor/seq/fold_left.hpp
completely, which is the 2nd biggest header after ustring.hxx.
Change-Id: I3df55770adcb46e56f389af828e8ba80da2dc1f2
In bridges/source/cpp_uno/gcc3_macosx_x86-64/share.hxx, the #if also covered
Clang, which actually needs these declarations (for now; the right fix will
probably be to #include <cxxabi.h>).
Change-Id: I1eebd59e2371f3498d740ab78244927358c4f23f
Subtle failures in nested template instantiations there, for
sal_{u}Int8 and sal_{u}Int16 - use wide-int fallback to do bitmask
ops. Type is not used to store any dynamic values.
This partially reverts a1ecce3ad7df6a82191c4956cec986dc50503dde
Change-Id: Ifa7070c1c3830fd70d7ced082d651411ff523444
This reverts commit 7ad4e562b462af22a1c29c955293238cdb30267b, which
was causing ICEs on precisely the compiler versions it was targetted
at.
Change-Id: I996792d723a8bd0d7edd5f248d74217322b5ce3f
The fix fbd85c25b is not sufficient to build with an old GCC 4.6.
The problem was, that underlying_type returned an int as default
value for GCC 4.6 and int allows negative values that are forbidden
in typed_flags_set.
Changed it to alternative solution suggested in
http://stackoverflow.com/questions/26148192/underlying-type-of-a-c-enum-in-c03
Change-Id: I20f44b8cef9c692efb583971bd251f1c34c289ab
Reviewed-on: https://gerrit.libreoffice.org/15663
Reviewed-by: Katarina Behrens <Katarina.Behrens@cib.de>
Tested-by: Katarina Behrens <Katarina.Behrens@cib.de>
- also add needed infrastructure to o3tl::enumarray so we can use
std::find on it
- move the Impl inside the .cxx file, no need to expose it in the header
Change-Id: I7758a6175849f46723d97b1e657f846524c3b7cd