22#include <com/sun/star/sdbc/DataType.hpp>
23#include <com/sun/star/sdbc/SQLException.hpp>
24#include <com/sun/star/sdbc/XResultSetMetaDataSupplier.hpp>
25#include <com/sun/star/ucb/ListActionType.hpp>
26#include <com/sun/star/ucb/XAnyCompare.hpp>
122 return "com.sun.star.comp.ucb.SortedResultSet";
140 std::unique_lock aGuard(
maMutex );
145 aEvt.Source =
static_cast< XComponent *
>( this );
171 std::unique_lock aGuard(
maMutex );
180 std::unique_lock aGuard(
maMutex );
192 std::unique_lock aGuard(
maMutex );
200 std::unique_lock aGuard(
maMutex );
208 std::unique_lock aGuard(
maMutex );
217 std::unique_lock aGuard(
maMutex );
275 std::unique_lock aGuard(
maMutex );
283 std::unique_lock aGuard(
maMutex );
291 std::unique_lock aGuard(
maMutex );
309 std::unique_lock aGuard(
maMutex );
358 std::unique_lock aGuard(
maMutex );
378 throw SQLException();
420 std::unique_lock aGuard(
maMutex );
424 throw SQLException();
464 std::unique_lock aGuard(
maMutex );
485 std::unique_lock aGuard(
maMutex );
489 throw SQLException();
498 std::unique_lock aGuard(
maMutex );
502 throw SQLException();
511 std::unique_lock aGuard(
maMutex );
515 throw SQLException();
524 std::unique_lock aGuard(
maMutex );
528 throw SQLException();
537 std::unique_lock aGuard(
maMutex );
541 throw SQLException();
553 std::unique_lock aGuard(
maMutex );
560 std::unique_lock aGuard(
maMutex );
567 std::unique_lock aGuard(
maMutex );
574 std::unique_lock aGuard(
maMutex );
581 std::unique_lock aGuard(
maMutex );
588 std::unique_lock aGuard(
maMutex );
594 std::unique_lock aGuard(
maMutex );
601 std::unique_lock aGuard(
maMutex );
608 std::unique_lock aGuard(
maMutex );
615 std::unique_lock aGuard(
maMutex );
622 std::unique_lock aGuard(
maMutex );
629 std::unique_lock aGuard(
maMutex );
636 std::unique_lock aGuard(
maMutex );
644 std::unique_lock aGuard(
maMutex );
652 std::unique_lock aGuard(
maMutex );
660 std::unique_lock aGuard(
maMutex );
668 std::unique_lock aGuard(
maMutex );
675 std::unique_lock aGuard(
maMutex );
682 std::unique_lock aGuard(
maMutex );
689 std::unique_lock aGuard(
maMutex );
699 std::unique_lock aGuard(
maMutex );
709 std::unique_lock aGuard(
maMutex );
720 std::unique_lock aGuard(
maMutex );
732 const OUString& PropertyName,
735 if ( PropertyName ==
"RowCount" || PropertyName ==
"IsRowCountFinal" )
736 throw IllegalArgumentException();
738 throw UnknownPropertyException(PropertyName);
744 std::unique_lock aGuard(
maMutex );
748 if ( PropertyName ==
"RowCount" )
752 else if ( PropertyName ==
"IsRowCountFinal" )
754 bool bOrgFinal =
false;
761 aOrgRet >>= bOrgFinal;
767 sal_uInt32 nOrgCount = 0;
768 aOrgRet >>= nOrgCount;
774 throw UnknownPropertyException(PropertyName);
781 const OUString& PropertyName,
784 std::unique_lock aGuard(
maMutex );
791 const OUString& PropertyName,
794 std::unique_lock aGuard(
maMutex );
801 const OUString& PropertyName,
804 std::unique_lock aGuard(
maMutex );
811 const OUString& PropertyName,
814 std::unique_lock aGuard(
maMutex );
824 sal_Int32 nIndexOne, sal_Int32 nIndexTwo,
830 sal_IntPtr nCompare = 0;
831 sal_Int32 nColumn = pSortInfo->
mnColumn;
833 switch ( pSortInfo->
mnType )
836 case DataType::TINYINT :
837 case DataType::SMALLINT :
838 case DataType::INTEGER :
843 if ( xResultOne->absolute( nIndexOne ) )
844 aOne = xRowOne->getInt( nColumn );
845 if ( xResultTwo->absolute( nIndexTwo ) )
846 aTwo = xRowTwo->getInt( nColumn );
850 else if ( aOne == aTwo )
857 case DataType::BIGINT :
862 if ( xResultOne->absolute( nIndexOne ) )
863 aOne = xRowOne->getLong( nColumn );
864 if ( xResultTwo->absolute( nIndexTwo ) )
865 aTwo = xRowTwo->getLong( nColumn );
869 else if ( aOne == aTwo )
876 case DataType::CHAR :
877 case DataType::VARCHAR :
878 case DataType::LONGVARCHAR :
882 if ( xResultOne->absolute( nIndexOne ) )
883 aOne = xRowOne->getString( nColumn );
884 if ( xResultTwo->absolute( nIndexTwo ) )
885 aTwo = xRowTwo->getString( nColumn );
889 aOne = aOne.toAsciiLowerCase();
890 aTwo = aTwo.toAsciiLowerCase();
893 nCompare = aOne.compareTo( aTwo );
896 case DataType::DATE :
901 if ( xResultOne->absolute( nIndexOne ) )
902 aOne = xRowOne->getDate( nColumn );
903 if ( xResultTwo->absolute( nIndexTwo ) )
904 aTwo = xRowTwo->getDate( nColumn );
906 nTmp =
static_cast<sal_Int32
>(aTwo.Year) -
static_cast<sal_Int32
>(aOne.Year);
908 nTmp =
static_cast<sal_Int32
>(aTwo.Month) -
static_cast<sal_Int32
>(aOne.Month);
910 nTmp =
static_cast<sal_Int32
>(aTwo.Day) -
static_cast<sal_Int32
>(aOne.Day);
915 else if ( nTmp == 0 )
922 case DataType::TIME :
927 if ( xResultOne->absolute( nIndexOne ) )
928 aOne = xRowOne->getTime( nColumn );
929 if ( xResultTwo->absolute( nIndexTwo ) )
930 aTwo = xRowTwo->getTime( nColumn );
932 nTmp =
static_cast<sal_Int32
>(aTwo.Hours) -
static_cast<sal_Int32
>(aOne.Hours);
934 nTmp =
static_cast<sal_Int32
>(aTwo.Minutes) -
static_cast<sal_Int32
>(aOne.Minutes);
936 nTmp =
static_cast<sal_Int32
>(aTwo.Seconds) -
static_cast<sal_Int32
>(aOne.Seconds);
938 nTmp =
static_cast<sal_Int32
>(aTwo.NanoSeconds)
939 -
static_cast<sal_Int32
>(aOne.NanoSeconds);
943 else if ( nTmp == 0 )
950 case DataType::TIMESTAMP :
955 if ( xResultOne->absolute( nIndexOne ) )
956 aOne = xRowOne->getTimestamp( nColumn );
957 if ( xResultTwo->absolute( nIndexTwo ) )
958 aTwo = xRowTwo->getTimestamp( nColumn );
960 nTmp =
static_cast<sal_Int32
>(aTwo.Year) -
static_cast<sal_Int32
>(aOne.Year);
962 nTmp =
static_cast<sal_Int32
>(aTwo.Month) -
static_cast<sal_Int32
>(aOne.Month);
964 nTmp =
static_cast<sal_Int32
>(aTwo.Day) -
static_cast<sal_Int32
>(aOne.Day);
966 nTmp =
static_cast<sal_Int32
>(aTwo.Hours) -
static_cast<sal_Int32
>(aOne.Hours);
968 nTmp =
static_cast<sal_Int32
>(aTwo.Minutes) -
static_cast<sal_Int32
>(aOne.Minutes);
970 nTmp =
static_cast<sal_Int32
>(aTwo.Seconds) -
static_cast<sal_Int32
>(aOne.Seconds);
972 nTmp =
static_cast<sal_Int32
>(aTwo.NanoSeconds)
973 -
static_cast<sal_Int32
>(aOne.NanoSeconds);
977 else if ( nTmp == 0 )
984 case DataType::REAL :
989 if ( xResultOne->absolute( nIndexOne ) )
990 aOne = xRowOne->getFloat( nColumn );
991 if ( xResultTwo->absolute( nIndexTwo ) )
992 aTwo = xRowTwo->getFloat( nColumn );
996 else if ( aOne == aTwo )
1003 case DataType::FLOAT :
1004 case DataType::DOUBLE :
1009 if ( xResultOne->absolute( nIndexOne ) )
1010 aOne = xRowOne->getDouble( nColumn );
1011 if ( xResultTwo->absolute( nIndexTwo ) )
1012 aTwo = xRowTwo->getDouble( nColumn );
1016 else if ( aOne == aTwo )
1025 OSL_FAIL(
"DataType not supported for compare!" );
1035 sal_Int32 nIndexOne, sal_Int32 nIndexTwo )
1037 sal_IntPtr nCompare = 0;
1040 while ( !nCompare && pInfo )
1045 nIndexOne, nIndexTwo, pInfo );
1056 if ( xResultOne->absolute( nIndexOne ) )
1057 aOne = xRowOne->getObject( pInfo->
mnColumn,
nullptr );
1058 if ( xResultTwo->absolute( nIndexTwo ) )
1059 aTwo = xRowTwo->getObject( pInfo->
mnColumn,
nullptr );
1065 nCompare = - nCompare;
1077 sal_IntPtr nIndexOne;
1078 sal_IntPtr nIndexTwo;
1105 sal_IntPtr nCompare;
1107 nIndexOne, nIndexTwo );
1113 sal_IntPtr _nStart, sal_IntPtr _nEnd )
1115 if ( _nStart > _nEnd )
1118 sal_IntPtr nStart = _nStart;
1119 sal_IntPtr nEnd = _nEnd;
1120 sal_IntPtr nMid = 0, nCompare = 0;
1123 while ( nStart <= nEnd )
1125 nMid = ( nEnd - nStart ) / 2 + nStart;
1127 nCompare =
Compare( pEntry, pMid );
1130 nCompare = (pEntry != pMid) ? ((pEntry < pMid) ? -1 : 1) : 0;
1147 std::unique_lock aGuard(
maMutex );
1155 if ( pPropsContainer )
1156 pPropsContainer->
notifyEach( aGuard, &XPropertyChangeListener::propertyChange, rEvt );
1160 if ( pPropsContainer )
1161 pPropsContainer->
notifyEach( aGuard, &XPropertyChangeListener::propertyChange, rEvt );
1224 catch (
const SQLException&)
1249 std::unique_lock aGuard(
maMutex );
1258 bool bIsFinal =
false;
1259 PropertyChangeEvent aEvt;
1261 aEvt.PropertyName =
"RowCount";
1262 aEvt.Further =
false;
1263 aEvt.PropertyHandle = -1;
1264 aEvt.OldValue <<= nOldCount;
1269 OUString
aName =
"IsRowCountFinal";
1271 if ( (aRet >>= bIsFinal) && bIsFinal != bWasFinal )
1273 aEvt.PropertyName =
aName;
1274 aEvt.Further =
false;
1275 aEvt.PropertyHandle = -1;
1276 aEvt.OldValue <<= bWasFinal;
1277 aEvt.NewValue <<= bIsFinal;
1282 catch (
const UnknownPropertyException&) {}
1283 catch (
const WrappedTargetException&) {}
1293 for (
i=1;
i<=nEnd;
i++ )
1319 sal_IntPtr nOldLastSort;
1338 for (
size_t j=1; j <
m_O2S.size(); ++j)
1340 sal_IntPtr nVal =
m_O2S[j];
1341 if ( nVal > nSortPos )
1349 if (
pData->mbModified )
1353 if ( nSortPos <= nOldLastSort )
1354 pEvents->
AddEvent( ListActionType::REMOVED, nSortPos );
1374 sal_IntPtr
i, nSortPos, nTo;
1381 pData->mnCurPos += nOffset;
1396 sal_IntPtr nEnd = nStart + nOffset;
1397 for (
i=nStart;
i<nEnd;
i++ )
1406 std::unique_ptr<sal_IntPtr[]> pTmpArr(
new sal_IntPtr[
nCount ]);
1415 sal_IntPtr nFrom =
nPos - 1;
1419 for (
i=0;
i>nOffset;
i-- )
1421 sal_IntPtr
const nVal =
m_O2S[nFrom +
i];
1429 for (
i=0;
i<nOffset;
i++ )
1431 sal_IntPtr
const nVal =
m_O2S[nStart +
i];
1437 nTo =
nPos + nOffset;
1454 OSL_FAIL(
"No MetaData, No Sorting!" );
1459 const NumberedSortingInfo *pSortInfo = xSortInfo.getConstArray();
1465 for ( sal_Int32
i=xSortInfo.getLength();
i > 0; )
1468 nColumn = pSortInfo[
i ].ColumnIndex;
1469 aPropName = xData->getColumnName( nColumn );
1472 if ( xCompFactory.is() )
1484 pInfo->
mnType = xData->getColumnType( nColumn );
1500 sal_IntPtr
const nSortPos =
m_O2S[
nPos];
1504 if ( !
pData->mbModified )
1506 pData->mbModified =
true;
1517 sal_IntPtr nCompare, nCurPos, nNewPos;
1518 sal_IntPtr nStart, nEnd, nOffset, nVal;
1526 pData->mbModified =
false;
1527 if ( nCompare != 0 )
1545 if ( nNewPos != nCurPos )
1548 maS2O.
Move(
static_cast<sal_uInt32
>(nCurPos), nNewPos );
1549 for (
size_t j = 1; j <
m_O2S.size(); ++j)
1552 if ( ( nStart <= nVal ) && ( nVal <= nEnd ) )
1562 aAction.Position = nCurPos;
1564 aAction.ListActionType = ListActionType::MOVED;
1565 aAction.ActionInfo <<= nNewPos-nCurPos;
1566 pList->
Insert( aAction );
1568 pList->
AddEvent( ListActionType::PROPERTIES_CHANGED, nNewPos );
1572 catch (
const SQLException&)
1583 sal_IntPtr
i, nNewPos, nVal;
1592 maS2O.
Move(
static_cast<sal_uInt32
>(
i), nNewPos );
1593 for (
size_t j=1; j<
m_O2S.size(); ++j)
1596 if ( nVal >= nNewPos )
1597 m_O2S[j] = nVal + 1;
1602 pList->
AddEvent( ListActionType::INSERTED, nNewPos );
1605 catch (
const SQLException&)
1638 if (
nPos <
static_cast<sal_IntPtr
>(
maData.size()) )
1641 maData.push_back( std::move(pEntry) );
1646 auto p = std::move(
maData[nOldPos]);
1653 std::unique_ptr<SortListData>
pData;
1655 if (
nPos <
static_cast<sal_IntPtr
>(
maData.size()) )
1669 if (
nPos <
static_cast<sal_IntPtr
>(
maData.size()) )
1682 if (
nPos <
static_cast<sal_IntPtr
>(
maData.size()) )
1688 if ( !
pData->mbModified )
1689 return pData->mnCurPos;
1692 OSL_FAIL(
"SortedEntryList: Can't get value for modified entry!");
1697 OSL_FAIL(
"SortedEntryList: invalid pos!");
1710 maProps[1].Name =
"IsRowCountFinal";
1728 if (
Name ==
"RowCount" )
1730 else if (
Name ==
"IsRowCountFinal" )
1733 throw UnknownPropertyException(
Name);
1740 if (
Name ==
"RowCount" )
1742 else if (
Name ==
"IsRowCountFinal" )
void AddEvent(sal_IntPtr nType, sal_Int32 nPos)
void Insert(const css::ucb::ListAction &rAction)
virtual Sequence< Property > SAL_CALL getProperties() override
virtual sal_Bool SAL_CALL hasPropertyByName(const OUString &Name) override
virtual Property SAL_CALL getPropertyByName(const OUString &aName) override
std::unique_ptr< SortListData > Remove(sal_Int32 nPos)
std::deque< std::unique_ptr< SortListData > > maData
sal_Int32 operator[](sal_Int32 nPos) const
SortListData * GetData(sal_Int32 nPos)
void Move(sal_Int32 nOldPos, sal_Int32 nNewPos)
void Insert(std::unique_ptr< SortListData > pEntry, sal_Int32 nPos)
virtual css::uno::Reference< css::uno::XInterface > SAL_CALL getStatement() override
std::deque< SortListData * > m_ModList
maps the original Entries to the sorted ones
virtual double SAL_CALL getDouble(sal_Int32 columnIndex) override
virtual css::uno::Reference< css::sdbc::XClob > SAL_CALL getClob(sal_Int32 columnIndex) override
virtual css::uno::Reference< css::io::XInputStream > SAL_CALL getBinaryStream(sal_Int32 columnIndex) override
sal_Int32 FindPos(SortListData const *pEntry, sal_IntPtr nStart, sal_IntPtr nEnd)
virtual void SAL_CALL addEventListener(const css::uno::Reference< css::lang::XEventListener > &Listener) override
virtual sal_Int16 SAL_CALL getShort(sal_Int32 columnIndex) override
virtual void SAL_CALL dispose() override
void ResortNew(EventList *pList)
virtual void SAL_CALL removeEventListener(const css::uno::Reference< css::lang::XEventListener > &Listener) override
virtual sal_Bool SAL_CALL next() override
virtual void SAL_CALL refreshRow() override
virtual css::uno::Reference< css::ucb::XContent > SAL_CALL queryContent() override
virtual sal_Bool SAL_CALL rowDeleted() override
virtual sal_Int8 SAL_CALL getByte(sal_Int32 columnIndex) override
virtual css::uno::Reference< css::sdbc::XResultSetMetaData > SAL_CALL getMetaData() override
virtual css::uno::Reference< css::sdbc::XRef > SAL_CALL getRef(sal_Int32 columnIndex) override
void Remove(sal_Int32 nPos, sal_Int32 nCount, EventList *pList)
virtual sal_Bool SAL_CALL getBoolean(sal_Int32 columnIndex) override
virtual OUString SAL_CALL getImplementationName() override
virtual sal_Bool SAL_CALL rowInserted() override
virtual sal_Bool SAL_CALL relative(sal_Int32 rows) override
moves the cursor a relative number of rows, either positive or negative.
void ResortModified(EventList *pList)
void SetChanged(sal_Int32 nPos, sal_Int32 nCount)
virtual sal_Bool SAL_CALL absolute(sal_Int32 row) override
moves the cursor to the given row number in the result set.
virtual css::uno::Reference< css::ucb::XContentIdentifier > SAL_CALL queryContentIdentifier() override
void Move(sal_Int32 nPos, sal_Int32 nCount, sal_Int32 nOffset)
css::uno::Reference< css::sdbc::XResultSet > mxOther
virtual void SAL_CALL removePropertyChangeListener(const OUString &PropertyName, const css::uno::Reference< css::beans::XPropertyChangeListener > &Listener) override
virtual ~SortedResultSet() override
virtual css::uno::Reference< css::sdbc::XBlob > SAL_CALL getBlob(sal_Int32 columnIndex) override
virtual void SAL_CALL removeVetoableChangeListener(const OUString &PropertyName, const css::uno::Reference< css::beans::XVetoableChangeListener > &aListener) override
virtual OUString SAL_CALL queryContentIdentifierString() override
virtual sal_Bool SAL_CALL last() override
virtual sal_Int32 SAL_CALL getInt(sal_Int32 columnIndex) override
sal_Int32 Compare(SortListData const *pOne, SortListData const *pTwo)
virtual css::util::Date SAL_CALL getDate(sal_Int32 columnIndex) override
static sal_Int32 CompareImpl(const css::uno::Reference< css::sdbc::XResultSet > &xResultOne, const css::uno::Reference< css::sdbc::XResultSet > &xResultTwo, sal_Int32 nIndexOne, sal_Int32 nIndexTwo, SortInfo const *pSortInfo)
virtual sal_Int64 SAL_CALL getLong(sal_Int32 columnIndex) override
virtual sal_Int32 SAL_CALL getRow() override
virtual sal_Bool SAL_CALL supportsService(const OUString &ServiceName) override
sal_Int32 mnLastSort
keeps track of modified entries
virtual sal_Bool SAL_CALL first() override
comphelper::OMultiTypeInterfaceContainerHelperVar4< OUString, css::beans::XPropertyChangeListener > maPropChangeListeners
virtual css::uno::Reference< css::io::XInputStream > SAL_CALL getCharacterStream(sal_Int32 columnIndex) override
void CopyData(SortedResultSet *pSource)
void PropertyChanged(const css::beans::PropertyChangeEvent &rEvt)
virtual css::util::Time SAL_CALL getTime(sal_Int32 columnIndex) override
virtual void SAL_CALL close() override
virtual css::uno::Any SAL_CALL getPropertyValue(const OUString &PropertyName) override
void Initialize(const css::uno::Sequence< css::ucb::NumberedSortingInfo > &xSortInfo, const css::uno::Reference< css::ucb::XAnyCompareFactory > &xCompFac)
SortedResultSet(css::uno::Reference< css::sdbc::XResultSet > const &aResult)
virtual css::uno::Sequence< sal_Int8 > SAL_CALL getBytes(sal_Int32 columnIndex) override
sal_Int32 GetCount() const
virtual sal_Bool SAL_CALL previous() override
moves the cursor to the previous row in the result set.
void BuildSortInfo(const css::uno::Reference< css::sdbc::XResultSet > &aResult, const css::uno::Sequence< css::ucb::NumberedSortingInfo > &xSortInfo, const css::uno::Reference< css::ucb::XAnyCompareFactory > &xCompFac)
virtual sal_Bool SAL_CALL isAfterLast() override
css::uno::Reference< css::sdbc::XResultSet > mxOriginal
comphelper::OMultiTypeInterfaceContainerHelperVar4< OUString, css::beans::XVetoableChangeListener > maVetoChangeListeners
comphelper::OInterfaceContainerHelper4< css::lang::XEventListener > maDisposeEventListeners
rtl::Reference< SRSPropertySetInfo > mpPropSetInfo
void CheckProperties(sal_Int32 nOldCount, bool bWasFinal)
virtual sal_Bool SAL_CALL rowUpdated() override
virtual void SAL_CALL afterLast() override
virtual sal_Bool SAL_CALL wasNull() override
virtual void SAL_CALL addPropertyChangeListener(const OUString &PropertyName, const css::uno::Reference< css::beans::XPropertyChangeListener > &Listener) override
virtual void SAL_CALL beforeFirst() override
virtual css::uno::Reference< css::beans::XPropertySetInfo > SAL_CALL getPropertySetInfo() override
virtual void SAL_CALL setPropertyValue(const OUString &PropertyName, const css::uno::Any &Value) override
virtual sal_Bool SAL_CALL isBeforeFirst() override
std::deque< sal_IntPtr > m_O2S
virtual css::uno::Any SAL_CALL getObject(sal_Int32 columnIndex, const css::uno::Reference< css::container::XNameAccess > &typeMap) override
virtual OUString SAL_CALL getString(sal_Int32 columnIndex) override
void InsertNew(sal_Int32 nPos, sal_Int32 nCount)
virtual css::uno::Sequence< OUString > SAL_CALL getSupportedServiceNames() override
virtual void SAL_CALL addVetoableChangeListener(const OUString &PropertyName, const css::uno::Reference< css::beans::XVetoableChangeListener > &Listener) override
virtual sal_Bool SAL_CALL isFirst() override
virtual css::uno::Reference< css::sdbc::XArray > SAL_CALL getArray(sal_Int32 columnIndex) override
virtual sal_Bool SAL_CALL isLast() override
virtual float SAL_CALL getFloat(sal_Int32 columnIndex) override
virtual css::util::DateTime SAL_CALL getTimestamp(sal_Int32 columnIndex) override
sal_Int32 addInterface(std::unique_lock< std::mutex > &rGuard, const css::uno::Reference< ListenerT > &rxIFace)
void notifyEach(std::unique_lock< std::mutex > &rGuard, void(SAL_CALL ListenerT::*NotificationMethod)(const EventT &), const EventT &Event) const
void disposeAndClear(::std::unique_lock<::std::mutex > &rGuard, const css::lang::EventObject &rEvt)
sal_Int32 getLength(std::unique_lock< std::mutex > &rGuard) const
sal_Int32 removeInterface(std::unique_lock< std::mutex > &rGuard, const css::uno::Reference< ListenerT > &rxIFace)
sal_Int32 removeInterface(::std::unique_lock<::std::mutex > &rGuard, const key &rKey, const css::uno::Reference< listener > &rListener)
bool hasContainedTypes(std::unique_lock< std::mutex > &rGuard) const
sal_Int32 addInterface(::std::unique_lock<::std::mutex > &rGuard, const key &rKey, const css::uno::Reference< listener > &rListener)
void disposeAndClear(std::unique_lock< std::mutex > &rGuard, const css::lang::EventObject &rEvt)
OInterfaceContainerHelper4< listener > * getContainer(std::unique_lock< std::mutex > &rGuard, const key &rKey) const
css::uno::Type const & get()
#define TOOLS_WARN_EXCEPTION(area, stream)
std::unique_ptr< sal_Int32[]> pData
class SAL_NO_VTABLE XPropertySet
bool CPPUHELPER_DLLPUBLIC supportsService(css::lang::XServiceInfo *implementation, rtl::OUString const &name)
constexpr OUStringLiteral RESULTSET_SERVICE_NAME
Reference< XAnyCompare > mxCompareFunction
SortListData(sal_IntPtr nPos)