| 741 | } |
| 742 | |
| 743 | void TModelTrees::FBDeserializeOwning(const NCatBoostFbs::TModelTrees* fbObj) { |
| 744 | ApproxDimension = fbObj->ApproxDimension(); |
| 745 | SetScaleAndBias(fbObj); |
| 746 | |
| 747 | auto& data = *CastToSolidTree(*this); |
| 748 | |
| 749 | if (fbObj->TreeSplits()) { |
| 750 | data.TreeSplits.assign(fbObj->TreeSplits()->begin(), fbObj->TreeSplits()->end()); |
| 751 | } |
| 752 | if (fbObj->TreeSizes()) { |
| 753 | data.TreeSizes.assign(fbObj->TreeSizes()->begin(), fbObj->TreeSizes()->end()); |
| 754 | } |
| 755 | if (fbObj->TreeStartOffsets()) { |
| 756 | data.TreeStartOffsets.assign(fbObj->TreeStartOffsets()->begin(), fbObj->TreeStartOffsets()->end()); |
| 757 | } |
| 758 | |
| 759 | if (fbObj->LeafValues()) { |
| 760 | data.LeafValues.assign( |
| 761 | fbObj->LeafValues()->data(), |
| 762 | fbObj->LeafValues()->data() + fbObj->LeafValues()->size() |
| 763 | ); |
| 764 | } |
| 765 | if (fbObj->NonSymmetricStepNodes()) { |
| 766 | data.NonSymmetricStepNodes.resize(fbObj->NonSymmetricStepNodes()->size()); |
| 767 | std::copy( |
| 768 | fbObj->NonSymmetricStepNodes()->begin(), |
| 769 | fbObj->NonSymmetricStepNodes()->end(), |
| 770 | data.NonSymmetricStepNodes.begin() |
| 771 | ); |
| 772 | } |
| 773 | if (fbObj->NonSymmetricNodeIdToLeafId()) { |
| 774 | data.NonSymmetricNodeIdToLeafId.assign( |
| 775 | fbObj->NonSymmetricNodeIdToLeafId()->begin(), fbObj->NonSymmetricNodeIdToLeafId()->end() |
| 776 | ); |
| 777 | } |
| 778 | if (fbObj->LeafWeights() && fbObj->LeafWeights()->size() > 0) { |
| 779 | data.LeafWeights.assign( |
| 780 | fbObj->LeafWeights()->data(), |
| 781 | fbObj->LeafWeights()->data() + fbObj->LeafWeights()->size() |
| 782 | ); |
| 783 | } |
| 784 | |
| 785 | if (fbObj->RepackedBins()) { |
| 786 | TVector<TRepackedBin> repackedBins(fbObj->RepackedBins()->size()); |
| 787 | std::copy( |
| 788 | fbObj->RepackedBins()->begin(), |
| 789 | fbObj->RepackedBins()->end(), |
| 790 | repackedBins.begin() |
| 791 | ); |
| 792 | RepackedBins = NCB::TMaybeOwningConstArrayHolder<TRepackedBin>::CreateOwning(std::move(repackedBins)); |
| 793 | } |
| 794 | |
| 795 | DeserializeFeatures(fbObj); |
| 796 | } |
| 797 | |
| 798 | void TModelTrees::FBDeserializeNonOwning(const NCatBoostFbs::TModelTrees* fbObj) { |
| 799 | ModelTreeData = MakeHolder<TOpaqueModelTree>(); |