MCPcopy Create free account
hub / github.com/catboost/catboost / Export

Method Export

util/generic/bitmap.h:572–594  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

570
571 template <class TTo>
572 void Export(size_t pos, TTo& to) const {
573 static_assert(std::is_unsigned<TTo>::value, "expect std::is_unsigned<TTo>::value");
574 to = 0;
575 size_t chunkpos = pos >> DivCount;
576 if (chunkpos >= Mask.GetChunkCapacity()) {
577 return;
578 }
579 if ((pos & ModMask) == 0) {
580 if (sizeof(TChunk) >= sizeof(TTo)) {
581 to = (TTo)Mask.Data[chunkpos];
582 } else { // if (sizeof(TChunk) < sizeof(TTo))
583 NBitMapPrivate::CopyData(&to, 1, Mask.Data + chunkpos, Min(((sizeof(TTo) * 8) >> DivCount), Mask.GetChunkCapacity() - chunkpos));
584 }
585 } else if ((pos & (sizeof(TTo) * 8 - 1)) == 0 && sizeof(TChunk) >= 2 * sizeof(TTo)) {
586 to = (TTo)(Mask.Data[chunkpos] >> (pos & ModMask));
587 } else {
588 static constexpr size_t copyToSize = (sizeof(TChunk) >= sizeof(TTo)) ? (sizeof(TChunk) / sizeof(TTo)) + 2 : 3;
589 TTo temp[copyToSize] = {0, 0};
590 // or use non defined by now TBitmap<copyToSize, TTo>::CopyData,RShift(pos & ModMask),Export(0,to)
591 NBitMapPrivate::CopyData(temp, copyToSize, Mask.Data + chunkpos, Min((sizeof(TTo) / sizeof(TChunk)) + 1, Mask.GetChunkCapacity() - chunkpos));
592 to = (temp[0] >> (pos & ModMask)) | (temp[1] << (8 * sizeof(TTo) - (pos & ModMask)));
593 }
594 }
595
596 Y_FORCE_INLINE bool Test(size_t n) const {
597 return Get(n);

Callers 3

LowMethod · 0.80
ToStringMethod · 0.80
Y_UNIT_TESTFunction · 0.80

Calls 3

CopyDataFunction · 0.85
MinFunction · 0.70
GetChunkCapacityMethod · 0.45

Tested by

no test coverage detected