19 #ifndef INCLUDED_COM_SUN_STAR_UNO_ANY_HXX
20 #define INCLUDED_COM_SUN_STAR_UNO_ANY_HXX
37 #include "com/sun/star/uno/RuntimeException.hpp"
65 this, const_cast<T *>(&value),
78 #if defined LIBO_INTERNAL_ONLY
79 template<
typename T1,
typename T2>
80 Any::Any(rtl::OUStringConcat<T1, T2> && value):
81 Any(
rtl::OUString(std::move(value)))
100 this, const_cast< void * >( pData_ ), pTypeDescr,
cpp_acquire );
106 this, const_cast< void * >( pData_ ), pType_,
cpp_acquire );
120 this, rAny.pData, rAny.pType,
126 #if defined LIBO_INTERNAL_ONLY
130 inline void moveAnyInternals(
Any & from,
Any & to) {
132 std::swap(from.pType, to.pType);
133 std::swap(from.pData, to.pData);
134 std::swap(from.pReserved, to.pReserved);
135 if (to.pData == &from.pReserved) {
136 to.pData = &to.pReserved;
147 detail::moveAnyInternals(other, *
this);
152 detail::moveAnyInternals(other, *
this);
160 return ::rtl::OUString( pType->pTypeName );
173 this, const_cast< void * >( pData_ ), pType_,
180 this, const_cast< void * >( pData_ ), pTypeDescr,
198 template <
typename T>
208 #if defined LIBO_INTERNAL_ONLY
209 template<>
bool Any::has<Any>()
const =
delete;
215 pData, pType, rAny.pData, rAny.pType,
222 pData, pType, rAny.pData, rAny.pType,
233 #if !defined LIBO_INTERNAL_ONLY
242 #if defined LIBO_INTERNAL_ONLY
244 template<
typename T1,
typename T2>
245 Any
makeAny(rtl::OUStringConcat<T1, T2> && value)
246 {
return Any(std::move(value)); }
248 template<
typename T1,
typename T2>
249 Any
toAny(rtl::OUStringConcat<T1, T2> && value)
250 {
return makeAny(std::move(value)); }
252 template<
typename T>
bool fromAny(Any
const & any, T * value) {
253 assert(value !=
nullptr);
254 return any >>= *value;
257 template<>
bool fromAny(Any
const & any, Any * value) {
258 assert(value !=
nullptr);
286 #ifdef LIBO_INTERNAL_ONLY // "RTL_FAST_STRING"
287 template<
class C1,
class C2 >
288 inline void SAL_CALL
operator <<= ( Any & rAny, rtl::OUStringConcat< C1, C2 >&& value )
293 &rAny, const_cast< rtl::OUString * >( &str ), rType.getTypeLibType(),
296 template<
typename T1,
typename T2>
297 void operator <<=(Any &, rtl::OUStringConcat<T1, T2>
const &) =
delete;
300 #if defined LIBO_INTERNAL_ONLY
301 template<>
void SAL_CALL
operator <<=(Any &, Any
const &) =
delete;
310 rAny.pData, rAny.pType,
322 value = bool(* static_cast< const sal_Bool * >( rAny.pData ));
332 bool(value) ==
bool(* static_cast< const sal_Bool * >( rAny.pData )));
341 value = *static_cast< sal_Bool const * >( rAny.pData );
353 bool(*static_cast< sal_Bool const * >( rAny.pData ))));
363 value = * static_cast< const sal_Int8 * >( rAny.pData );
373 switch (rAny.pType->eTypeClass)
376 value = * static_cast< const sal_Int8 * >( rAny.pData );
380 value = * static_cast< const sal_Int16 * >( rAny.pData );
390 switch (rAny.pType->eTypeClass)
393 value = static_cast<sal_uInt16>( * static_cast< const sal_Int8 * >( rAny.pData ) );
397 value = * static_cast< const sal_uInt16 * >( rAny.pData );
408 switch (rAny.pType->eTypeClass)
411 value = * static_cast< const sal_Int8 * >( rAny.pData );
414 value = * static_cast< const sal_Int16 * >( rAny.pData );
417 value = * static_cast< const sal_uInt16 * >( rAny.pData );
421 value = * static_cast< const sal_Int32 * >( rAny.pData );
431 switch (rAny.pType->eTypeClass)
434 value = static_cast<sal_uInt32>( * static_cast< const sal_Int8 * >( rAny.pData ) );
437 value = static_cast<sal_uInt32>( * static_cast< const sal_Int16 * >( rAny.pData ) );
440 value = * static_cast< const sal_uInt16 * >( rAny.pData );
444 value = * static_cast< const sal_uInt32 * >( rAny.pData );
455 switch (rAny.pType->eTypeClass)
458 value = * static_cast< const sal_Int8 * >( rAny.pData );
461 value = * static_cast< const sal_Int16 * >( rAny.pData );
464 value = * static_cast< const sal_uInt16 * >( rAny.pData );
467 value = * static_cast< const sal_Int32 * >( rAny.pData );
470 value = * static_cast< const sal_uInt32 * >( rAny.pData );
474 value = * static_cast< const sal_Int64 * >( rAny.pData );
484 switch (rAny.pType->eTypeClass)
487 value = static_cast<sal_uInt64>( * static_cast< const sal_Int8 * >( rAny.pData ) );
490 value = static_cast<sal_uInt64>( * static_cast< const sal_Int16 * >( rAny.pData ) );
493 value = * static_cast< const sal_uInt16 * >( rAny.pData );
496 value = static_cast<sal_uInt64>( * static_cast< const sal_Int32 * >( rAny.pData ) );
499 value = * static_cast< const sal_uInt32 * >( rAny.pData );
503 value = * static_cast< const sal_uInt64 * >( rAny.pData );
514 switch (rAny.pType->eTypeClass)
517 value = * static_cast< const sal_Int8 * >( rAny.pData );
520 value = * static_cast< const sal_Int16 * >( rAny.pData );
523 value = * static_cast< const sal_uInt16 * >( rAny.pData );
526 value = * static_cast< const float * >( rAny.pData );
537 switch (rAny.pType->eTypeClass)
540 value = * static_cast< const sal_Int8 * >( rAny.pData );
543 value = * static_cast< const sal_Int16 * >( rAny.pData );
546 value = * static_cast< const sal_uInt16 * >( rAny.pData );
549 value = * static_cast< const sal_Int32 * >( rAny.pData );
552 value = * static_cast< const sal_uInt32 * >( rAny.pData );
555 value = * static_cast< const float * >( rAny.pData );
558 value = * static_cast< const double * >( rAny.pData );
571 value = * static_cast< const ::rtl::OUString * >( rAny.pData );
578 inline bool SAL_CALL
operator == (
const Any & rAny, const ::rtl::OUString & value )
581 value == * static_cast< const ::rtl::OUString * >( rAny.pData ) );
590 value = * static_cast< const Type * >( rAny.pData );
600 value.
equals( * static_cast< const Type * >( rAny.pData ) ));
604 #if defined LIBO_INTERNAL_ONLY
605 template<>
bool SAL_CALL
operator >>=(Any
const &, Any &) =
delete;
613 &value, rAny.pData, rAny.pType,
626 return static_cast< const BaseReference * >( rAny.pData )->operator == ( value );
638 rAny.pData, rAny.pType,
647 return (!
operator == ( rAny, value ));
650 template <
typename T>
654 if (! (*
this >>= value)) {
655 throw RuntimeException(
665 #if defined LIBO_INTERNAL_ONLY
675 template<
typename charT,
typename traits>
676 inline std::basic_ostream<charT, traits> &
operator<<(std::basic_ostream<charT, traits> &o,
Any const &any) {
678 switch(any.pType->eTypeClass) {
682 o <<
' ' << any.
get<
bool>();
688 o <<
' ' << any.
get<sal_Int64>();
693 o <<
' ' << any.
get<sal_uInt64>();
697 o <<
' ' << any.
get<
double>();
700 std::ios_base::fmtflags flgs = o.setf(
701 std::ios_base::hex, std::ios_base::basefield);
702 charT fill = o.fill(
'0');
703 o <<
" U+" << std::setw(4)
704 << *static_cast<sal_Unicode const *>(any.
getValue());
717 << ((*static_cast<uno_Sequence * const *>(any.
getValue()))->
721 o << ' ' << *static_cast<sal_Int32 const *>(any.
getValue());
728 o << ' ' << *static_cast<void * const *>(any.
getValue());
745 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */