///////////////////////////////////////////////////////////////////////////
| 191 | |
| 192 | //////////////////////////////////////////////////////////////////////////////// |
| 193 | bool Variant::operator<(const Variant& other) const { |
| 194 | Variant left(*this); |
| 195 | Variant right(other); |
| 196 | |
| 197 | if (left._type == type_string) Lexer::dequote(left._string); |
| 198 | |
| 199 | if (right._type == type_string) Lexer::dequote(right._string); |
| 200 | |
| 201 | switch (left._type) { |
| 202 | case type_boolean: |
| 203 | switch (right._type) { |
| 204 | case type_boolean: |
| 205 | return !left._bool && right._bool; |
| 206 | case type_integer: |
| 207 | left.cast(type_integer); |
| 208 | return left._integer < right._integer; |
| 209 | case type_real: |
| 210 | left.cast(type_real); |
| 211 | return left._real < right._real; |
| 212 | case type_string: |
| 213 | left.cast(type_string); |
| 214 | return left._string < right._string; |
| 215 | case type_date: |
| 216 | left.cast(type_date); |
| 217 | return left._date < right._date; |
| 218 | case type_duration: |
| 219 | left.cast(type_duration); |
| 220 | return left._duration < right._duration; |
| 221 | } |
| 222 | break; |
| 223 | |
| 224 | case type_integer: |
| 225 | switch (right._type) { |
| 226 | case type_boolean: |
| 227 | right.cast(type_integer); |
| 228 | return left._integer < right._integer; |
| 229 | case type_integer: |
| 230 | return left._integer < right._integer; |
| 231 | case type_real: |
| 232 | left.cast(type_real); |
| 233 | return left._real < right._real; |
| 234 | case type_string: |
| 235 | left.cast(type_string); |
| 236 | return left._string < right._string; |
| 237 | case type_date: |
| 238 | left.cast(type_date); |
| 239 | return left._date < right._date; |
| 240 | case type_duration: |
| 241 | left.cast(type_duration); |
| 242 | return left._duration < right._duration; |
| 243 | } |
| 244 | break; |
| 245 | |
| 246 | case type_real: |
| 247 | switch (right._type) { |
| 248 | case type_boolean: |
| 249 | right.cast(type_real); |
| 250 | return left._real < right._real; |