2010-10-14 08:30:07 +02:00
|
|
|
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
|
2012-06-13 14:17:57 +01:00
|
|
|
/*
|
|
|
|
* This file is part of the LibreOffice project.
|
|
|
|
*
|
|
|
|
* This Source Code Form is subject to the terms of the Mozilla Public
|
|
|
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
|
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
|
|
|
*
|
|
|
|
* This file incorporates work covered by the following license notice:
|
|
|
|
*
|
|
|
|
* Licensed to the Apache Software Foundation (ASF) under one or more
|
|
|
|
* contributor license agreements. See the NOTICE file distributed
|
|
|
|
* with this work for additional information regarding copyright
|
|
|
|
* ownership. The ASF licenses this file to you under the Apache
|
|
|
|
* License, Version 2.0 (the "License"); you may not use this file
|
|
|
|
* except in compliance with the License. You may obtain a copy of
|
|
|
|
* the License at http://www.apache.org/licenses/LICENSE-2.0 .
|
|
|
|
*/
|
2006-01-10 14:54:18 +00:00
|
|
|
|
|
|
|
#ifndef INCLUDED_CPPU_UNOTYPE_HXX
|
|
|
|
#define INCLUDED_CPPU_UNOTYPE_HXX
|
|
|
|
|
2013-11-09 15:12:09 -06:00
|
|
|
#include <sal/config.h>
|
2015-04-01 08:30:19 +02:00
|
|
|
|
2015-11-10 13:14:21 +01:00
|
|
|
#include <cstddef>
|
|
|
|
|
2015-04-01 09:15:41 +02:00
|
|
|
#if defined LIBO_INTERNAL_ONLY
|
2015-04-01 08:30:19 +02:00
|
|
|
#include <type_traits>
|
|
|
|
#endif
|
|
|
|
|
2013-11-09 15:12:09 -06:00
|
|
|
#include <sal/types.h>
|
|
|
|
#include <typelib/typeclass.h>
|
|
|
|
#include <typelib/typedescription.h>
|
2006-01-10 14:54:18 +00:00
|
|
|
|
|
|
|
namespace com { namespace sun { namespace star { namespace uno {
|
2014-11-17 22:45:11 +01:00
|
|
|
class Type;
|
2006-01-10 14:54:18 +00:00
|
|
|
class Any;
|
|
|
|
class Exception;
|
|
|
|
template< typename > class Reference;
|
|
|
|
template< typename > class Sequence;
|
|
|
|
class XInterface;
|
|
|
|
} } } }
|
|
|
|
namespace rtl { class OUString; }
|
|
|
|
|
|
|
|
namespace cppu {
|
|
|
|
|
|
|
|
template< typename > class UnoType;
|
|
|
|
|
|
|
|
/**
|
|
|
|
A unique C++ type representing the UNO type VOID in cppu::UnoType.
|
|
|
|
|
|
|
|
This type is declared but not defined. Its only use is as a template
|
|
|
|
argument to cppu::UnoType.
|
2006-01-26 16:46:21 +00:00
|
|
|
|
|
|
|
@since UDK 3.2.2
|
2006-01-10 14:54:18 +00:00
|
|
|
*/
|
|
|
|
struct UnoVoidType;
|
|
|
|
|
|
|
|
/**
|
|
|
|
A unique C++ type representing the UNO type UNSIGNED SHORT in cppu::UnoType.
|
|
|
|
|
|
|
|
The UNO types UNSIGNED SHORT and CHAR map to the same C++ type, so this C++
|
|
|
|
type is needed to unambiguously specify UNO types in cppu::UnoType.
|
|
|
|
|
|
|
|
This type is declared but not defined. Its only use is as a template
|
|
|
|
argument to cppu::UnoType.
|
2006-01-26 16:46:21 +00:00
|
|
|
|
|
|
|
@since UDK 3.2.2
|
2006-01-10 14:54:18 +00:00
|
|
|
*/
|
|
|
|
struct UnoUnsignedShortType;
|
|
|
|
|
|
|
|
/**
|
2014-11-17 16:11:04 +01:00
|
|
|
A unique C++ type representing the UNO type CHAR in cppu::UnoType.
|
2006-01-10 14:54:18 +00:00
|
|
|
|
|
|
|
The UNO types UNSIGNED SHORT and CHAR map to the same C++ type, so this C++
|
|
|
|
type is needed to unambiguously specify UNO types in cppu::UnoType.
|
|
|
|
|
|
|
|
This type is declared but not defined. Its only use is as a template
|
|
|
|
argument to cppu::UnoType.
|
2006-01-26 16:46:21 +00:00
|
|
|
|
|
|
|
@since UDK 3.2.2
|
2006-01-10 14:54:18 +00:00
|
|
|
*/
|
|
|
|
struct UnoCharType;
|
|
|
|
|
|
|
|
/**
|
|
|
|
A unique C++ type template representing the UNO sequence types in
|
|
|
|
cppu::UnoType.
|
|
|
|
|
|
|
|
The UNO types UNSIGNED SHORT and CHAR map to the same C++ type, so this C++
|
|
|
|
type is needed to unambiguously specify UNO types in cppu::UnoType.
|
|
|
|
|
|
|
|
This type is declared but not defined. Its only use is as a template
|
|
|
|
argument to cppu::UnoType.
|
2006-01-26 16:46:21 +00:00
|
|
|
|
|
|
|
@since UDK 3.2.2
|
2006-01-10 14:54:18 +00:00
|
|
|
*/
|
|
|
|
template< typename > struct UnoSequenceType;
|
|
|
|
|
|
|
|
namespace detail {
|
|
|
|
|
2015-10-20 10:44:15 +02:00
|
|
|
inline css::uno::Type const & getTypeFromTypeDescriptionReference(
|
2006-01-10 14:54:18 +00:00
|
|
|
::typelib_TypeDescriptionReference * const * tdr)
|
|
|
|
{
|
2015-10-20 10:44:15 +02:00
|
|
|
return *reinterpret_cast< css::uno::Type const * >(tdr);
|
2006-01-10 14:54:18 +00:00
|
|
|
}
|
|
|
|
|
2015-10-20 10:44:15 +02:00
|
|
|
inline css::uno::Type const &
|
2006-01-10 14:54:18 +00:00
|
|
|
getTypeFromTypeClass(::typelib_TypeClass tc) {
|
|
|
|
return getTypeFromTypeDescriptionReference(
|
|
|
|
::typelib_static_type_getByTypeClass(tc));
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
namespace cppu { namespace detail {
|
|
|
|
|
2015-10-20 10:44:15 +02:00
|
|
|
inline css::uno::Type const &
|
2012-01-21 15:21:16 +01:00
|
|
|
cppu_detail_getUnoType(SAL_UNUSED_PARAMETER ::cppu::UnoVoidType const *) {
|
2006-01-10 14:54:18 +00:00
|
|
|
return ::cppu::detail::getTypeFromTypeClass(::typelib_TypeClass_VOID);
|
|
|
|
}
|
|
|
|
|
2015-10-20 10:44:15 +02:00
|
|
|
inline css::uno::Type const &
|
2012-01-21 15:21:16 +01:00
|
|
|
cppu_detail_getUnoType(SAL_UNUSED_PARAMETER bool const *) {
|
2006-01-10 14:54:18 +00:00
|
|
|
return ::cppu::detail::getTypeFromTypeClass(::typelib_TypeClass_BOOLEAN);
|
|
|
|
}
|
|
|
|
|
2015-10-20 10:44:15 +02:00
|
|
|
inline css::uno::Type const &
|
2014-04-03 13:52:06 +02:00
|
|
|
cppu_detail_getUnoType(SAL_UNUSED_PARAMETER sal_Bool const *) {
|
2006-01-10 14:54:18 +00:00
|
|
|
return ::cppu::detail::getTypeFromTypeClass(::typelib_TypeClass_BOOLEAN);
|
|
|
|
}
|
|
|
|
|
2015-10-20 10:44:15 +02:00
|
|
|
inline css::uno::Type const &
|
2012-01-21 15:21:16 +01:00
|
|
|
cppu_detail_getUnoType(SAL_UNUSED_PARAMETER ::sal_Int8 const *) {
|
2006-01-10 14:54:18 +00:00
|
|
|
return ::cppu::detail::getTypeFromTypeClass(::typelib_TypeClass_BYTE);
|
|
|
|
}
|
|
|
|
|
2015-10-20 10:44:15 +02:00
|
|
|
inline css::uno::Type const &
|
2012-01-21 15:21:16 +01:00
|
|
|
cppu_detail_getUnoType(SAL_UNUSED_PARAMETER ::sal_Int16 const *) {
|
2006-01-10 14:54:18 +00:00
|
|
|
return ::cppu::detail::getTypeFromTypeClass(::typelib_TypeClass_SHORT);
|
|
|
|
}
|
|
|
|
|
2015-10-20 10:44:15 +02:00
|
|
|
inline css::uno::Type const &
|
2012-01-21 15:21:16 +01:00
|
|
|
cppu_detail_getUnoType(
|
|
|
|
SAL_UNUSED_PARAMETER ::cppu::UnoUnsignedShortType const *)
|
|
|
|
{
|
2006-01-10 14:54:18 +00:00
|
|
|
return ::cppu::detail::getTypeFromTypeClass(
|
|
|
|
::typelib_TypeClass_UNSIGNED_SHORT);
|
|
|
|
}
|
|
|
|
|
2016-03-13 09:18:00 +01:00
|
|
|
#if LIBO_INTERNAL_ONLY
|
Use C++11 char16_t for sal_Unicode
...in LIBO_INTERNAL_ONLY, __cplusplus, non-MSVC case.
It turns out that sal_Unicode happens to not be mangled into any symbols that
make up the stable URE interface, so (for LIBO_INTERNAL_ONLY, at least) we are
free to replace the typedef to sal_uInt16 with a typedef to any integral type
layout-compatible with that. (sal_Unicode does appear in some symbols in sal's
PRIVATE_textenc.1 section, but that is private between the sal and sal_textenc
libraries, so changing those symbols does not require a change of SONAME.)
C++11 chart16_t is the obvious choice (and will ultimately allow using u"..."
to write literals of type array-of-sal_Unicode). Reportedly, char16_t is
supported since GCC 4.4 and Clang 2.9 but will only be available in MSVC 2015.
For plain C, we continue to use sal_uInt16. We could theoretically use C11
char16_t from <uchar.h>, but at least the Mac OS X 10.11 SDK still does not
offer that C11 header.
For MSVC, we continue to use wchar_t (which is actually unsigned short, due to
/Zc:wchar_t-) for now. Potential options there include dropping /Zc:wchar_t-
and using true wchar_t, or using C++11 char16_t once support for MSVC 2013 is
dropped.
Some code needed to be adapted that was written in a way assuming that
sal_Unicode is unsigned short (which indicates that changing sal_Unicode for
non-LIBO_INTERNAL_ONLY would be an ABI change). OUStringBuffer::append can now
differentiate between being called with sal_Unicode (to append a single
character) and erroneously being called with sal_uInt16 (intending to append a
number's textual representation, for which the sal_Int32 overload must be used
instead). Bugs found are 379fe0409e7973b36210cffa3dd1dfd4032f0ecc "Assume that
this code wants to append a number, not a character" and
dc148335a6a438848325f24c49198fba81043279 "Assume this wants to append the
numerical representation."
The GDB support for pretty-printing of sal_Unicode-related data in
solenv/gdb/libreoffice/sal.py can presumably be simplified now.
Change-Id: I445b3a80e65b7cb004d9e08b38bdc9ee93bc9401
Reviewed-on: https://gerrit.libreoffice.org/20036
Reviewed-by: Stephan Bergmann <sbergman@redhat.com>
Tested-by: Stephan Bergmann <sbergman@redhat.com>
2015-11-18 13:40:34 +01:00
|
|
|
// cf. sal/types.h sal_Unicode
|
|
|
|
inline css::uno::Type const &
|
|
|
|
cppu_detail_getUnoType(SAL_UNUSED_PARAMETER sal_uInt16 const *) {
|
|
|
|
return cppu::detail::getTypeFromTypeClass(typelib_TypeClass_UNSIGNED_SHORT);
|
|
|
|
}
|
|
|
|
#endif
|
|
|
|
|
2015-10-20 10:44:15 +02:00
|
|
|
inline css::uno::Type const &
|
2012-01-21 15:21:16 +01:00
|
|
|
cppu_detail_getUnoType(SAL_UNUSED_PARAMETER ::sal_Int32 const *) {
|
2006-01-10 14:54:18 +00:00
|
|
|
return ::cppu::detail::getTypeFromTypeClass(::typelib_TypeClass_LONG);
|
|
|
|
}
|
|
|
|
|
2015-10-20 10:44:15 +02:00
|
|
|
inline css::uno::Type const &
|
2012-01-21 15:21:16 +01:00
|
|
|
cppu_detail_getUnoType(SAL_UNUSED_PARAMETER ::sal_uInt32 const *) {
|
2006-01-10 14:54:18 +00:00
|
|
|
return ::cppu::detail::getTypeFromTypeClass(
|
|
|
|
::typelib_TypeClass_UNSIGNED_LONG);
|
|
|
|
}
|
|
|
|
|
2015-10-20 10:44:15 +02:00
|
|
|
inline css::uno::Type const &
|
2012-01-21 15:21:16 +01:00
|
|
|
cppu_detail_getUnoType(SAL_UNUSED_PARAMETER ::sal_Int64 const *) {
|
2006-01-10 14:54:18 +00:00
|
|
|
return ::cppu::detail::getTypeFromTypeClass(::typelib_TypeClass_HYPER);
|
|
|
|
}
|
|
|
|
|
2015-10-20 10:44:15 +02:00
|
|
|
inline css::uno::Type const &
|
2012-01-21 15:21:16 +01:00
|
|
|
cppu_detail_getUnoType(SAL_UNUSED_PARAMETER ::sal_uInt64 const *) {
|
2006-01-10 14:54:18 +00:00
|
|
|
return ::cppu::detail::getTypeFromTypeClass(
|
|
|
|
::typelib_TypeClass_UNSIGNED_HYPER);
|
|
|
|
}
|
|
|
|
|
2015-10-20 10:44:15 +02:00
|
|
|
inline css::uno::Type const &
|
2012-01-21 15:21:16 +01:00
|
|
|
cppu_detail_getUnoType(SAL_UNUSED_PARAMETER float const *) {
|
2006-01-10 14:54:18 +00:00
|
|
|
return ::cppu::detail::getTypeFromTypeClass(::typelib_TypeClass_FLOAT);
|
|
|
|
}
|
|
|
|
|
2015-10-20 10:44:15 +02:00
|
|
|
inline css::uno::Type const &
|
2012-01-21 15:21:16 +01:00
|
|
|
cppu_detail_getUnoType(SAL_UNUSED_PARAMETER double const *) {
|
2006-01-10 14:54:18 +00:00
|
|
|
return ::cppu::detail::getTypeFromTypeClass(::typelib_TypeClass_DOUBLE);
|
|
|
|
}
|
|
|
|
|
2015-10-20 10:44:15 +02:00
|
|
|
inline css::uno::Type const &
|
2012-01-21 15:21:16 +01:00
|
|
|
cppu_detail_getUnoType(SAL_UNUSED_PARAMETER ::cppu::UnoCharType const *) {
|
2006-01-10 14:54:18 +00:00
|
|
|
return ::cppu::detail::getTypeFromTypeClass(::typelib_TypeClass_CHAR);
|
|
|
|
}
|
|
|
|
|
2016-03-13 09:18:00 +01:00
|
|
|
#if LIBO_INTERNAL_ONLY
|
Use C++11 char16_t for sal_Unicode
...in LIBO_INTERNAL_ONLY, __cplusplus, non-MSVC case.
It turns out that sal_Unicode happens to not be mangled into any symbols that
make up the stable URE interface, so (for LIBO_INTERNAL_ONLY, at least) we are
free to replace the typedef to sal_uInt16 with a typedef to any integral type
layout-compatible with that. (sal_Unicode does appear in some symbols in sal's
PRIVATE_textenc.1 section, but that is private between the sal and sal_textenc
libraries, so changing those symbols does not require a change of SONAME.)
C++11 chart16_t is the obvious choice (and will ultimately allow using u"..."
to write literals of type array-of-sal_Unicode). Reportedly, char16_t is
supported since GCC 4.4 and Clang 2.9 but will only be available in MSVC 2015.
For plain C, we continue to use sal_uInt16. We could theoretically use C11
char16_t from <uchar.h>, but at least the Mac OS X 10.11 SDK still does not
offer that C11 header.
For MSVC, we continue to use wchar_t (which is actually unsigned short, due to
/Zc:wchar_t-) for now. Potential options there include dropping /Zc:wchar_t-
and using true wchar_t, or using C++11 char16_t once support for MSVC 2013 is
dropped.
Some code needed to be adapted that was written in a way assuming that
sal_Unicode is unsigned short (which indicates that changing sal_Unicode for
non-LIBO_INTERNAL_ONLY would be an ABI change). OUStringBuffer::append can now
differentiate between being called with sal_Unicode (to append a single
character) and erroneously being called with sal_uInt16 (intending to append a
number's textual representation, for which the sal_Int32 overload must be used
instead). Bugs found are 379fe0409e7973b36210cffa3dd1dfd4032f0ecc "Assume that
this code wants to append a number, not a character" and
dc148335a6a438848325f24c49198fba81043279 "Assume this wants to append the
numerical representation."
The GDB support for pretty-printing of sal_Unicode-related data in
solenv/gdb/libreoffice/sal.py can presumably be simplified now.
Change-Id: I445b3a80e65b7cb004d9e08b38bdc9ee93bc9401
Reviewed-on: https://gerrit.libreoffice.org/20036
Reviewed-by: Stephan Bergmann <sbergman@redhat.com>
Tested-by: Stephan Bergmann <sbergman@redhat.com>
2015-11-18 13:40:34 +01:00
|
|
|
// cf. sal/types.h sal_Unicode
|
|
|
|
inline css::uno::Type const &
|
|
|
|
cppu_detail_getUnoType(SAL_UNUSED_PARAMETER sal_Unicode const *) {
|
|
|
|
return cppu::detail::getTypeFromTypeClass(typelib_TypeClass_CHAR);
|
|
|
|
}
|
|
|
|
#endif
|
|
|
|
|
2015-10-20 10:44:15 +02:00
|
|
|
inline css::uno::Type const &
|
2012-01-21 15:21:16 +01:00
|
|
|
cppu_detail_getUnoType(SAL_UNUSED_PARAMETER ::rtl::OUString const *) {
|
2006-01-10 14:54:18 +00:00
|
|
|
return ::cppu::detail::getTypeFromTypeClass(::typelib_TypeClass_STRING);
|
|
|
|
}
|
|
|
|
|
2015-10-20 10:44:15 +02:00
|
|
|
inline css::uno::Type const &
|
|
|
|
cppu_detail_getUnoType(SAL_UNUSED_PARAMETER css::uno::Type const *)
|
2012-01-21 15:21:16 +01:00
|
|
|
{
|
2006-01-10 14:54:18 +00:00
|
|
|
return ::cppu::detail::getTypeFromTypeClass(::typelib_TypeClass_TYPE);
|
|
|
|
}
|
|
|
|
|
2015-10-20 10:44:15 +02:00
|
|
|
inline css::uno::Type const &
|
|
|
|
cppu_detail_getUnoType(SAL_UNUSED_PARAMETER css::uno::Any const *)
|
2012-01-21 15:21:16 +01:00
|
|
|
{
|
2006-01-10 14:54:18 +00:00
|
|
|
return ::cppu::detail::getTypeFromTypeClass(::typelib_TypeClass_ANY);
|
|
|
|
}
|
|
|
|
|
2015-10-20 10:44:15 +02:00
|
|
|
template< typename T > inline css::uno::Type const &
|
2012-01-21 15:21:16 +01:00
|
|
|
cppu_detail_getUnoType(
|
|
|
|
SAL_UNUSED_PARAMETER ::cppu::UnoSequenceType< T > const *)
|
|
|
|
{
|
2006-01-10 14:54:18 +00:00
|
|
|
//TODO: depending on memory model, the following might not work reliably
|
2015-11-10 10:12:56 +01:00
|
|
|
static typelib_TypeDescriptionReference * p = NULL;
|
|
|
|
if (p == NULL) {
|
2006-01-10 14:54:18 +00:00
|
|
|
::typelib_static_sequence_type_init(
|
|
|
|
&p, ::cppu::UnoType< T >::get().getTypeLibType());
|
|
|
|
}
|
|
|
|
return ::cppu::detail::getTypeFromTypeDescriptionReference(&p);
|
|
|
|
}
|
|
|
|
|
2015-10-20 10:44:15 +02:00
|
|
|
template< typename T > inline css::uno::Type const &
|
2012-01-21 15:21:16 +01:00
|
|
|
cppu_detail_getUnoType(
|
2015-10-20 10:44:15 +02:00
|
|
|
SAL_UNUSED_PARAMETER css::uno::Sequence< T > const *)
|
2012-01-21 15:21:16 +01:00
|
|
|
{
|
2006-01-10 14:54:18 +00:00
|
|
|
return cppu_detail_getUnoType(
|
|
|
|
static_cast< ::cppu::UnoSequenceType< T > * >(0));
|
|
|
|
}
|
|
|
|
|
2015-10-20 10:44:15 +02:00
|
|
|
inline css::uno::Type const & cppu_detail_getUnoType(
|
|
|
|
SAL_UNUSED_PARAMETER css::uno::Exception const *)
|
2012-01-21 15:21:16 +01:00
|
|
|
{
|
2006-01-10 14:54:18 +00:00
|
|
|
return ::cppu::detail::getTypeFromTypeClass(::typelib_TypeClass_EXCEPTION);
|
|
|
|
}
|
|
|
|
|
2015-10-20 10:44:15 +02:00
|
|
|
inline css::uno::Type const & cppu_detail_getUnoType(
|
|
|
|
SAL_UNUSED_PARAMETER css::uno::XInterface const *)
|
2012-01-21 15:21:16 +01:00
|
|
|
{
|
2006-01-10 14:54:18 +00:00
|
|
|
return ::cppu::detail::getTypeFromTypeClass(::typelib_TypeClass_INTERFACE);
|
|
|
|
}
|
|
|
|
|
2015-10-20 10:44:15 +02:00
|
|
|
template< typename T > inline css::uno::Type const &
|
2012-01-21 15:21:16 +01:00
|
|
|
cppu_detail_getUnoType(
|
2015-10-20 10:44:15 +02:00
|
|
|
SAL_UNUSED_PARAMETER css::uno::Reference< T > const *)
|
2012-01-21 15:21:16 +01:00
|
|
|
{
|
2006-01-10 14:54:18 +00:00
|
|
|
return ::cppu::UnoType< T >::get();
|
|
|
|
}
|
|
|
|
|
|
|
|
} }
|
|
|
|
|
|
|
|
namespace cppu {
|
|
|
|
|
|
|
|
/**
|
2015-10-20 10:44:15 +02:00
|
|
|
Get the css::uno::Type instance representing a certain UNO type.
|
2006-01-10 14:54:18 +00:00
|
|
|
|
|
|
|
For each C++ type representing a UNO type, the corresponding instantiation of
|
|
|
|
this template has a public static member function get(). (The template is
|
|
|
|
specialized for C++ templates representing polymorphic struct type templates
|
|
|
|
of UNO. In those cases, it does not work to instantiate UnoType with a C++
|
|
|
|
type that is derived from a C++ type that represents a UNO type, but does not
|
|
|
|
itself represent a UNO type. In all other cases, UnoType even works for such
|
|
|
|
C++ types that are unambiguously derived from one C++ type that represents a
|
|
|
|
UNO type.) In addition to those C++ types that are mappings of UNO types
|
|
|
|
(except for sal_uInt16 and sal_Unicode, see below), the following C++ types
|
2015-04-01 12:48:44 +02:00
|
|
|
are appropriate as template arguments: void, cppu::UnoVoidType, bool,
|
2006-01-10 14:54:18 +00:00
|
|
|
cppu::UnoUnsignedShortType, cppu::UnoCharType, cppu::UnoSequenceType with any
|
|
|
|
appropriate template argument (the latter three to unambiguously specify UNO
|
|
|
|
types, as the UNO types UNSIGNED SHORT and CHAR map to the same C++ type),
|
2015-10-20 10:44:15 +02:00
|
|
|
and css::uno::Reference with any appropriate template argument.
|
2006-01-26 16:46:21 +00:00
|
|
|
|
|
|
|
@since UDK 3.2.2
|
2006-01-10 14:54:18 +00:00
|
|
|
*/
|
|
|
|
template< typename T > class UnoType {
|
|
|
|
public:
|
2015-10-20 10:44:15 +02:00
|
|
|
static inline css::uno::Type const & get() {
|
2006-01-10 14:54:18 +00:00
|
|
|
using namespace ::cppu::detail;
|
2015-04-01 09:15:41 +02:00
|
|
|
#if defined LIBO_INTERNAL_ONLY
|
2015-04-01 08:30:19 +02:00
|
|
|
typedef typename std::remove_reference<T>::type T1;
|
|
|
|
// for certain uses of UnoType<decltype(x)>
|
|
|
|
#else
|
|
|
|
typedef T T1;
|
|
|
|
#endif
|
|
|
|
return cppu_detail_getUnoType(static_cast< T1 * >(0));
|
2006-01-10 14:54:18 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
private:
|
2015-02-07 12:11:30 +01:00
|
|
|
UnoType(UnoType &) SAL_DELETED_FUNCTION;
|
|
|
|
~UnoType() SAL_DELETED_FUNCTION;
|
|
|
|
void operator =(UnoType &) SAL_DELETED_FUNCTION;
|
2006-01-10 14:54:18 +00:00
|
|
|
};
|
|
|
|
|
2015-04-01 12:48:44 +02:00
|
|
|
template<> css::uno::Type inline const & UnoType<void>::get() {
|
|
|
|
return cppu::UnoType<cppu::UnoVoidType>::get();
|
|
|
|
}
|
|
|
|
|
2006-01-10 14:54:18 +00:00
|
|
|
/**
|
|
|
|
A working replacement for getCppuType (see there).
|
|
|
|
|
|
|
|
There are three overloads of this function that together form the replacement
|
|
|
|
of getCppuType. The replacement has exactly the same semantics as
|
|
|
|
getCppuType, in that it returns correct results for the UNO type UNSIGNED
|
|
|
|
SHORT but not for the UNO type CHAR.
|
2006-01-26 16:46:21 +00:00
|
|
|
|
|
|
|
@since UDK 3.2.2
|
2006-01-10 14:54:18 +00:00
|
|
|
*/
|
2015-10-20 10:44:15 +02:00
|
|
|
template< typename T > inline css::uno::Type const &
|
2012-01-21 15:21:16 +01:00
|
|
|
getTypeFavourUnsigned(SAL_UNUSED_PARAMETER T const *) {
|
2006-01-10 14:54:18 +00:00
|
|
|
return ::cppu::UnoType< T >::get();
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
A working replacement for getCppuType (see there).
|
|
|
|
|
|
|
|
There are three overloads of this function that together form the replacement
|
|
|
|
of getCppuType. The replacement has exactly the same semantics as
|
|
|
|
getCppuType, in that it returns correct results for the UNO type UNSIGNED
|
|
|
|
SHORT but not for the UNO type CHAR.
|
2006-01-26 16:46:21 +00:00
|
|
|
|
|
|
|
@since UDK 3.2.2
|
2006-01-10 14:54:18 +00:00
|
|
|
*/
|
2015-10-20 10:44:15 +02:00
|
|
|
inline css::uno::Type const &
|
2012-01-21 15:21:16 +01:00
|
|
|
getTypeFavourUnsigned(SAL_UNUSED_PARAMETER ::sal_uInt16 const *) {
|
2006-01-10 14:54:18 +00:00
|
|
|
return ::cppu::UnoType< ::cppu::UnoUnsignedShortType >::get();
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
A working replacement for getCppuType (see there).
|
|
|
|
|
|
|
|
There are three overloads of this function that together form the replacement
|
|
|
|
of getCppuType. The replacement has exactly the same semantics as
|
|
|
|
getCppuType, in that it returns correct results for the UNO type UNSIGNED
|
|
|
|
SHORT but not for the UNO type CHAR.
|
2006-01-26 16:46:21 +00:00
|
|
|
|
|
|
|
@since UDK 3.2.2
|
2006-01-10 14:54:18 +00:00
|
|
|
*/
|
2015-10-20 10:44:15 +02:00
|
|
|
template< typename T > inline css::uno::Type const &
|
|
|
|
getTypeFavourUnsigned(css::uno::Sequence< T > const *);
|
2006-01-10 14:54:18 +00:00
|
|
|
// defined in com/sun/star/uno/Sequence.hxx
|
|
|
|
|
2012-01-05 19:40:38 +01:00
|
|
|
/// @cond INTERNAL
|
|
|
|
|
2006-03-09 09:44:54 +00:00
|
|
|
/**
|
|
|
|
A working replacement for getCppuType (see there).
|
|
|
|
|
|
|
|
There are three overloads of this function that together form the replacement
|
|
|
|
of the getCppuType template. The replacement has exactly the same semantics
|
|
|
|
as the getCppuType template, in that it returns correct results for the UNO
|
|
|
|
type CHAR but not for the UNO type UNSIGNED SHORT. Additionally, it also
|
|
|
|
returns the intended results for sequence types.
|
|
|
|
|
|
|
|
@since UDK 3.2.3
|
|
|
|
*/
|
2015-10-20 10:44:15 +02:00
|
|
|
template< typename T > inline css::uno::Type const &
|
2012-01-21 15:21:16 +01:00
|
|
|
getTypeFavourChar(SAL_UNUSED_PARAMETER T const *) {
|
2006-03-09 09:44:54 +00:00
|
|
|
return ::cppu::UnoType< T >::get();
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
A working replacement for getCppuType (see there).
|
|
|
|
|
|
|
|
There are three overloads of this function that together form the replacement
|
|
|
|
of the getCppuType template. The replacement has exactly the same semantics
|
|
|
|
as the getCppuType template, in that it returns correct results for the UNO
|
|
|
|
type CHAR but not for the UNO type UNSIGNED SHORT. Additionally, it also
|
|
|
|
returns the intended results for sequence types.
|
|
|
|
|
|
|
|
@since UDK 3.2.3
|
|
|
|
*/
|
2015-10-20 10:44:15 +02:00
|
|
|
inline css::uno::Type const &
|
2012-01-21 15:21:16 +01:00
|
|
|
getTypeFavourChar(SAL_UNUSED_PARAMETER ::sal_Unicode const *) {
|
2006-03-09 09:44:54 +00:00
|
|
|
return ::cppu::UnoType< ::cppu::UnoCharType >::get();
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
A working replacement for getCppuType (see there).
|
|
|
|
|
|
|
|
There are three overloads of this function that together form the replacement
|
|
|
|
of the getCppuType template. The replacement has exactly the same semantics
|
|
|
|
as the getCppuType template, in that it returns correct results for the UNO
|
|
|
|
type CHAR but not for the UNO type UNSIGNED SHORT. Additionally, it also
|
|
|
|
returns the intended results for sequence types.
|
|
|
|
|
|
|
|
@since UDK 3.2.3
|
|
|
|
*/
|
2015-10-20 10:44:15 +02:00
|
|
|
template< typename T > inline css::uno::Type const &
|
|
|
|
getTypeFavourChar(css::uno::Sequence< T > const *);
|
2006-03-09 09:44:54 +00:00
|
|
|
// defined in com/sun/star/uno/Sequence.hxx
|
|
|
|
|
2012-01-05 19:40:38 +01:00
|
|
|
/// @endcond
|
|
|
|
|
2006-01-10 14:54:18 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
#endif
|
2010-10-14 08:30:07 +02:00
|
|
|
|
|
|
|
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|