Lines Matching full:accumulator
474 static RT_API_ATTRS void MaxMinHelper(Descriptor &accumulator, in MaxMinHelper() argument
477 accumulator.rank() == 0 || x.rank() == 0 || in MaxMinHelper()
478 accumulator.rank() == x.rank()); in MaxMinHelper()
481 std::size_t accumChars{accumulator.ElementBytes() >> shift<CHAR>}; in MaxMinHelper()
484 bool reallocate{accumulator.raw().base_addr == nullptr || in MaxMinHelper()
485 accumChars != chars || (accumulator.rank() == 0 && x.rank() > 0)}; in MaxMinHelper()
486 int rank{std::max(accumulator.rank(), x.rank())}; in MaxMinHelper()
490 if (accumulator.rank() > 0) { in MaxMinHelper()
491 SubscriptValue accumExt{accumulator.GetDimension(j).Extent()}; in MaxMinHelper()
500 ub[j] = accumulator.GetDimension(j).Extent(); in MaxMinHelper()
506 const CHAR *accumData{accumulator.OffsetElement<CHAR>()}; in MaxMinHelper()
508 old = accumulator.raw().base_addr; in MaxMinHelper()
509 accumulator.set_base_addr(nullptr); in MaxMinHelper()
510 accumulator.raw().elem_len = chars << shift<CHAR>; in MaxMinHelper()
512 accumulator.GetDimension(j).SetBounds(1, ub[j]); in MaxMinHelper()
514 RUNTIME_CHECK(terminator, accumulator.Allocate() == CFI_SUCCESS); in MaxMinHelper()
516 for (CHAR *result{accumulator.OffsetElement<CHAR>()}; elements-- > 0; in MaxMinHelper()
533 static RT_API_ATTRS void MaxMin(Descriptor &accumulator, const Descriptor &x, in MaxMin() argument
536 RUNTIME_CHECK(terminator, accumulator.raw().type == x.raw().type); in MaxMin()
537 switch (accumulator.raw().type) { in MaxMin()
539 MaxMinHelper<char, ISMIN>(accumulator, x, terminator); in MaxMin()
542 MaxMinHelper<char16_t, ISMIN>(accumulator, x, terminator); in MaxMin()
545 MaxMinHelper<char32_t, ISMIN>(accumulator, x, terminator); in MaxMin()
556 void RTDEF(CharacterConcatenate)(Descriptor &accumulator, in RTDEF()
560 accumulator.rank() == 0 || from.rank() == 0 || in RTDEF()
561 accumulator.rank() == from.rank()); in RTDEF()
562 int rank{std::max(accumulator.rank(), from.rank())}; in RTDEF()
566 if (accumulator.rank() > 0 && from.rank() > 0) { in RTDEF()
567 ub[j] = accumulator.GetDimension(j).Extent(); in RTDEF()
577 (accumulator.rank() ? accumulator : from).GetDimension(j).Extent(); in RTDEF()
581 std::size_t oldBytes{accumulator.ElementBytes()}; in RTDEF()
582 void *old{accumulator.raw().base_addr}; in RTDEF()
583 accumulator.set_base_addr(nullptr); in RTDEF()
585 accumulator.raw().elem_len += fromBytes; in RTDEF()
586 std::size_t newBytes{accumulator.ElementBytes()}; in RTDEF()
588 accumulator.GetDimension(j).SetBounds(1, ub[j]); in RTDEF()
590 if (accumulator.Allocate() != CFI_SUCCESS) { in RTDEF()
595 char *to{static_cast<char *>(accumulator.raw().base_addr)}; in RTDEF()
606 Descriptor &accumulator, const char *from, std::size_t chars) { in RTDEF()
608 RUNTIME_CHECK(terminator, accumulator.rank() == 0); in RTDEF()
609 void *old{accumulator.raw().base_addr}; in RTDEF()
610 accumulator.set_base_addr(nullptr); in RTDEF()
611 std::size_t oldLen{accumulator.ElementBytes()}; in RTDEF()
612 accumulator.raw().elem_len += chars; in RTDEF()
613 RUNTIME_CHECK(terminator, accumulator.Allocate() == CFI_SUCCESS); in RTDEF()
614 std::memcpy(accumulator.OffsetElement<char>(oldLen), from, chars); in RTDEF()
889 void RTDEF(CharacterMax)(Descriptor &accumulator, const Descriptor &x, in RTDEF()
891 MaxMin<false>(accumulator, x, sourceFile, sourceLine); in RTDEF()
894 void RTDEF(CharacterMin)(Descriptor &accumulator, const Descriptor &x, in RTDEF()
896 MaxMin<true>(accumulator, x, sourceFile, sourceLine); in RTDEF()