23 #include <com/sun/star/util/Date.hpp>
24 #include <com/sun/star/util/Time.hpp>
25 #include <com/sun/star/util/DateTime.hpp>
29 using ::com::sun::star::uno::Reference;
30 using ::com::sun::star::uno::Type;
31 using ::com::sun::star::uno::TypeClass_CHAR;
32 using ::com::sun::star::uno::TypeClass_BOOLEAN;
33 using ::com::sun::star::uno::TypeClass_BYTE;
34 using ::com::sun::star::uno::TypeClass_SHORT;
35 using ::com::sun::star::uno::TypeClass_UNSIGNED_SHORT;
36 using ::com::sun::star::uno::TypeClass_LONG;
37 using ::com::sun::star::uno::TypeClass_UNSIGNED_LONG;
38 using ::com::sun::star::uno::TypeClass_HYPER;
39 using ::com::sun::star::uno::TypeClass_UNSIGNED_HYPER;
40 using ::com::sun::star::uno::TypeClass_FLOAT;
41 using ::com::sun::star::uno::TypeClass_DOUBLE;
42 using ::com::sun::star::uno::TypeClass_STRING;
43 using ::com::sun::star::uno::TypeClass_TYPE;
44 using ::com::sun::star::uno::TypeClass_ENUM;
45 using ::com::sun::star::uno::TypeClass_INTERFACE;
46 using ::com::sun::star::uno::TypeClass_STRUCT;
47 using ::com::sun::star::i18n::XCollator;
48 using ::com::sun::star::util::Date;
49 using ::com::sun::star::util::Time;
50 using ::com::sun::star::util::DateTime;
54 class DatePredicateLess :
public IKeyPredicateLess
57 virtual bool isLess( css::uno::Any
const & _lhs, css::uno::Any
const & _rhs )
const override
60 if ( !( _lhs >>= lhs )
63 throw css::lang::IllegalArgumentException();
66 if ( lhs.Year < rhs.Year )
68 if ( lhs.Year > rhs.Year )
71 if ( lhs.Month < rhs.Month )
73 if ( lhs.Month > rhs.Month )
76 if ( lhs.Day < rhs.Day )
82 class TimePredicateLess :
public IKeyPredicateLess
85 virtual bool isLess( css::uno::Any
const & _lhs, css::uno::Any
const & _rhs )
const override
88 if ( !( _lhs >>= lhs )
91 throw css::lang::IllegalArgumentException();
94 if ( lhs.Hours < rhs.Hours )
96 if ( lhs.Hours > rhs.Hours )
99 if ( lhs.Minutes < rhs.Minutes )
101 if ( lhs.Minutes > rhs.Minutes )
104 if ( lhs.Seconds < rhs.Seconds )
106 if ( lhs.Seconds > rhs.Seconds )
109 if ( lhs.NanoSeconds < rhs.NanoSeconds )
115 class DateTimePredicateLess :
public IKeyPredicateLess
118 virtual bool isLess( css::uno::Any
const & _lhs, css::uno::Any
const & _rhs )
const override
121 if ( !( _lhs >>= lhs )
124 throw css::lang::IllegalArgumentException();
127 if ( lhs.Year < rhs.Year )
129 if ( lhs.Year > rhs.Year )
132 if ( lhs.Month < rhs.Month )
134 if ( lhs.Month > rhs.Month )
137 if ( lhs.Day < rhs.Day )
139 if ( lhs.Day > rhs.Day )
142 if ( lhs.Hours < rhs.Hours )
144 if ( lhs.Hours > rhs.Hours )
147 if ( lhs.Minutes < rhs.Minutes )
149 if ( lhs.Minutes > rhs.Minutes )
152 if ( lhs.Seconds < rhs.Seconds )
154 if ( lhs.Seconds > rhs.Seconds )
157 if ( lhs.NanoSeconds < rhs.NanoSeconds )
167 std::unique_ptr< IKeyPredicateLess > pComparator;
168 switch ( i_type.getTypeClass() )
173 case TypeClass_BOOLEAN:
179 case TypeClass_SHORT:
182 case TypeClass_UNSIGNED_SHORT:
188 case TypeClass_UNSIGNED_LONG:
191 case TypeClass_HYPER:
194 case TypeClass_UNSIGNED_HYPER:
197 case TypeClass_FLOAT:
200 case TypeClass_DOUBLE:
203 case TypeClass_STRING:
204 if ( i_collator.is() )
215 case TypeClass_INTERFACE:
218 case TypeClass_STRUCT:
220 pComparator.reset(
new DatePredicateLess );
222 pComparator.reset(
new TimePredicateLess );
224 pComparator.reset(
new DateTimePredicateLess );
232 bool anyLess( css::uno::Any
const & lhs, css::uno::Any
const & rhs)
234 auto lhsTypeClass = lhs.getValueType().getTypeClass();
235 auto rhsTypeClass = rhs.getValueType().getTypeClass();
236 if (lhsTypeClass != rhsTypeClass)
237 return lhsTypeClass < rhsTypeClass;
239 switch ( lhsTypeClass )
243 case TypeClass_BOOLEAN:
249 case TypeClass_SHORT:
252 case TypeClass_UNSIGNED_SHORT:
258 case TypeClass_UNSIGNED_LONG:
261 case TypeClass_HYPER:
264 case TypeClass_UNSIGNED_HYPER:
267 case TypeClass_FLOAT:
270 case TypeClass_DOUBLE:
273 case TypeClass_STRING:
282 case TypeClass_INTERFACE:
285 case TypeClass_STRUCT:
287 return DatePredicateLess().isLess(lhs, rhs);
289 return TimePredicateLess().isLess(lhs, rhs);
291 return DateTimePredicateLess().isLess(lhs, rhs);
virtual bool isLess(css::uno::Any const &_lhs, css::uno::Any const &_rhs) const override
bool anyLess(css::uno::Any const &lhs, css::uno::Any const &rhs)
Compare two Anys.
virtual bool isLess(css::uno::Any const &_lhs, css::uno::Any const &_rhs) const override
virtual bool isLess(css::uno::Any const &_lhs, css::uno::Any const &_rhs) const override
std::unique_ptr< IKeyPredicateLess > getStandardLessPredicate(Type const &i_type, Reference< XCollator > const &i_collator)