| 1560 | // |
| 1561 | |
| 1562 | static void cmp_slice( gpre_req* request) |
| 1563 | { |
| 1564 | |
| 1565 | slc* slice = request->req_slice; |
| 1566 | const gpre_fld* field = slice->slc_field; |
| 1567 | gpre_fld* element = field->fld_array; |
| 1568 | const ary* array = field->fld_array_info; |
| 1569 | |
| 1570 | // Process variable references |
| 1571 | |
| 1572 | for (ref* reference = request->req_values; reference; reference = reference->ref_next) |
| 1573 | { |
| 1574 | reference->ref_id = slice->slc_parameters++; |
| 1575 | } |
| 1576 | |
| 1577 | request->req_blr = request->req_base = MSC_alloc(500); |
| 1578 | request->req_length = 500; |
| 1579 | |
| 1580 | request->add_byte(isc_sdl_version1); |
| 1581 | request->add_byte(isc_sdl_struct); |
| 1582 | request->add_byte(1); |
| 1583 | cmp_field(request, element, 0); |
| 1584 | |
| 1585 | request->add_byte(isc_sdl_relation); |
| 1586 | CMP_stuff_symbol(request, field->fld_relation->rel_symbol); |
| 1587 | |
| 1588 | request->add_byte(isc_sdl_field); |
| 1589 | CMP_stuff_symbol(request, field->fld_symbol); |
| 1590 | |
| 1591 | bool loop_flags[MAX_ARRAY_DIMENSIONS]; |
| 1592 | { // scope block |
| 1593 | fb_assert(slice->slc_dimensions <= MAX_ARRAY_DIMENSIONS); |
| 1594 | USHORT n = 0; |
| 1595 | for (bool* p = loop_flags; n < slice->slc_dimensions; n++, p++) |
| 1596 | *p = cmp_sdl_loop(request, n, slice, array); |
| 1597 | } // end scope block |
| 1598 | |
| 1599 | request->add_byte(isc_sdl_element); |
| 1600 | request->add_byte(1); |
| 1601 | request->add_byte(isc_sdl_scalar); |
| 1602 | request->add_byte(0); |
| 1603 | request->add_byte(slice->slc_dimensions); |
| 1604 | { // scope block |
| 1605 | USHORT n = 0; |
| 1606 | for (const bool* p = loop_flags; n < slice->slc_dimensions; n++, p++) |
| 1607 | { |
| 1608 | if (!*p) |
| 1609 | cmp_sdl_fudge(request, array->ary_rpt[n].ary_lower); |
| 1610 | cmp_sdl_subscript(request, n, slice); |
| 1611 | } |
| 1612 | } // end scope block |
| 1613 | |
| 1614 | request->add_byte(isc_sdl_eoc); |
| 1615 | request->req_length = request->req_blr - request->req_base; |
| 1616 | request->req_blr = request->req_base; |
| 1617 | } |
| 1618 | |
| 1619 |
no test coverage detected