| 482 | // List scan iterator |
| 483 | |
| 484 | class IndexScanListIterator |
| 485 | { |
| 486 | public: |
| 487 | IndexScanListIterator(thread_db* tdbb, const IndexRetrieval* retrieval); |
| 488 | |
| 489 | bool isEmpty() const |
| 490 | { |
| 491 | return m_listValues.isEmpty(); |
| 492 | } |
| 493 | |
| 494 | bool getNext(thread_db* tdbb, temporary_key* lower, temporary_key* upper) |
| 495 | { |
| 496 | if (++m_iterator < m_listValues.end()) |
| 497 | { |
| 498 | makeKeys(tdbb, lower, upper); |
| 499 | return true; |
| 500 | } |
| 501 | |
| 502 | m_iterator = nullptr; |
| 503 | return false; |
| 504 | } |
| 505 | |
| 506 | const ValueExprNode* const* getLowerValues() const |
| 507 | { |
| 508 | return m_lowerValues.begin(); |
| 509 | } |
| 510 | |
| 511 | const ValueExprNode* const* getUpperValues() const |
| 512 | { |
| 513 | return m_upperValues.begin(); |
| 514 | } |
| 515 | |
| 516 | SSHORT* getScale() |
| 517 | { |
| 518 | return m_retrieval->irb_scale; |
| 519 | } |
| 520 | |
| 521 | private: |
| 522 | void makeKeys(thread_db* tdbb, temporary_key* lower, temporary_key* upper); |
| 523 | |
| 524 | const IndexRetrieval* const m_retrieval; |
| 525 | Firebird::HalfStaticArray<const ValueExprNode*, 16> m_listValues; |
| 526 | Firebird::HalfStaticArray<const ValueExprNode*, 4> m_lowerValues; |
| 527 | Firebird::HalfStaticArray<const ValueExprNode*, 4> m_upperValues; |
| 528 | const ValueExprNode* const* m_iterator; |
| 529 | USHORT m_segno = MAX_USHORT; |
| 530 | }; |
| 531 | |
| 532 | } //namespace Jrd |
| 533 |
no outgoing calls
no test coverage detected