| 573 | } |
| 574 | |
| 575 | void BfFieldInstance::GetDataRange(int& dataIdx, int& dataCount) |
| 576 | { |
| 577 | int minMergedDataIdx = mMergedDataIdx; |
| 578 | int maxMergedDataIdx = minMergedDataIdx + 1; |
| 579 | if (mResolvedType->IsStruct()) |
| 580 | maxMergedDataIdx = minMergedDataIdx + mResolvedType->ToTypeInstance()->mMergedFieldDataCount; |
| 581 | |
| 582 | if (mOwner->mIsUnion) |
| 583 | { |
| 584 | for (auto& checkFieldInstance : mOwner->mFieldInstances) |
| 585 | { |
| 586 | if (&checkFieldInstance == this) |
| 587 | continue; |
| 588 | |
| 589 | if (checkFieldInstance.mDataIdx == mDataIdx) |
| 590 | { |
| 591 | int checkMinMergedDataIdx = checkFieldInstance.mMergedDataIdx; |
| 592 | int checkMaxMergedDataIdx = checkMinMergedDataIdx + 1; |
| 593 | if (checkFieldInstance.GetResolvedType()->IsStruct()) |
| 594 | checkMaxMergedDataIdx = checkMinMergedDataIdx + checkFieldInstance.mResolvedType->ToTypeInstance()->mMergedFieldDataCount; |
| 595 | |
| 596 | minMergedDataIdx = BF_MIN(minMergedDataIdx, checkMinMergedDataIdx); |
| 597 | maxMergedDataIdx = BF_MAX(maxMergedDataIdx, checkMaxMergedDataIdx); |
| 598 | } |
| 599 | } |
| 600 | } |
| 601 | |
| 602 | int fieldIdx = dataIdx - 1; |
| 603 | if (fieldIdx == -1) |
| 604 | { |
| 605 | dataIdx = minMergedDataIdx + 1; |
| 606 | } |
| 607 | else |
| 608 | { |
| 609 | fieldIdx += minMergedDataIdx; |
| 610 | dataIdx = fieldIdx + 1; |
| 611 | } |
| 612 | dataCount = maxMergedDataIdx - minMergedDataIdx; |
| 613 | } |
| 614 | |
| 615 | int BfFieldInstance::GetAlign(int packing) |
| 616 | { |
no test coverage detected