| 123 | using TObjectsGroupingPtr = TIntrusivePtr<TObjectsGrouping>; |
| 124 | |
| 125 | class TObjectsGroupingSubset { |
| 126 | public: |
| 127 | // needed because of default init in Cython |
| 128 | TObjectsGroupingSubset() = default; |
| 129 | |
| 130 | TObjectsGroupingSubset( |
| 131 | TObjectsGroupingPtr subsetGrouping, |
| 132 | TArraySubsetIndexing<ui32>&& groupsSubset, |
| 133 | EObjectsOrder groupSubsetOrder, |
| 134 | TMaybe<TArraySubsetIndexing<ui32>>&& objectsSubsetForNonTrivialGrouping |
| 135 | = TMaybe<TArraySubsetIndexing<ui32>>(), |
| 136 | |
| 137 | // used only if objectsSubsetForNonTrivialGrouping is specified |
| 138 | EObjectsOrder objectSubsetOrder = EObjectsOrder::Undefined |
| 139 | ) |
| 140 | : SubsetGrouping(std::move(subsetGrouping)) |
| 141 | , GroupsSubset(std::move(groupsSubset)) |
| 142 | , GroupSubsetOrder(groupSubsetOrder) |
| 143 | , ObjectsSubsetForNonTrivialGrouping(std::move(objectsSubsetForNonTrivialGrouping)) |
| 144 | , ObjectSubsetOrder(objectSubsetOrder) |
| 145 | { |
| 146 | CB_ENSURE(SubsetGrouping, "subsetGrouping must be initialized"); |
| 147 | } |
| 148 | |
| 149 | bool operator==(const TObjectsGroupingSubset& rhs) const { |
| 150 | if (!(*SubsetGrouping == *rhs.SubsetGrouping) || |
| 151 | (GroupsSubset != rhs.GroupsSubset)) |
| 152 | { |
| 153 | return false; |
| 154 | } |
| 155 | if (ObjectsSubsetForNonTrivialGrouping) { |
| 156 | if (rhs.ObjectsSubsetForNonTrivialGrouping) { |
| 157 | return *ObjectsSubsetForNonTrivialGrouping == *rhs.ObjectsSubsetForNonTrivialGrouping; |
| 158 | } |
| 159 | return false; |
| 160 | } |
| 161 | return !rhs.ObjectsSubsetForNonTrivialGrouping; |
| 162 | } |
| 163 | |
| 164 | TObjectsGroupingPtr GetSubsetGrouping() const { |
| 165 | return SubsetGrouping; |
| 166 | } |
| 167 | |
| 168 | const TArraySubsetIndexing<ui32>& GetGroupsIndexing() const { |
| 169 | return GroupsSubset; |
| 170 | } |
| 171 | |
| 172 | const TArraySubsetIndexing<ui32>& GetObjectsIndexing() const { |
| 173 | return ObjectsSubsetForNonTrivialGrouping ? |
| 174 | *ObjectsSubsetForNonTrivialGrouping : GroupsSubset; |
| 175 | } |
| 176 | |
| 177 | EObjectsOrder GetGroupSubsetOrder() const { |
| 178 | return GroupSubsetOrder; |
| 179 | } |
| 180 | |
| 181 | EObjectsOrder GetObjectSubsetOrder() const { |
| 182 | return ObjectsSubsetForNonTrivialGrouping ? GroupSubsetOrder : ObjectSubsetOrder; |
no outgoing calls
no test coverage detected