bool VectorRecord::allValuesAreLoaded() const { if (!dataPtr() || !dataPtr()->pagedAndPageletTreeValueCount()) return true; IntegerSequence curSlice(size(), offset(), stride()); IntegerSequence restrictedSlice = curSlice.intersect(IntegerSequence(pagedAndPageletTreeValueCount())); if (restrictedSlice.size() == 0) return true; Nullable<long> slotIndex; Fora::Interpreter::ExecutionContext* context = Fora::Interpreter::ExecutionContext::currentExecutionContext(); if (context) slotIndex = context->getCurrentBigvecSlotIndex(); else slotIndex = 0; lassert(slotIndex); if (!dataPtr()->bigvecHandleForSlot(*slotIndex)) return false; bool tr = dataPtr()-> bigvecHandleForSlot(*slotIndex)->allValuesAreLoadedBetween( restrictedSlice.smallestValue(), restrictedSlice.largestValue() + 1 ); return tr; }
PooledVectorRecord PooledVectorRecord::slice( Nullable<int64_t> nLow, Nullable<int64_t> nHigh, Nullable<int64_t> nStride ) const { if (!mDataPtr) return PooledVectorRecord(); if (nStride && *nStride == 0) return PooledVectorRecord(); IntegerSequence sequenceToUse = IntegerSequence(mSize, mOffset, mStride).slice(nLow, nHigh, nStride); if (!sequenceToUse.size()) return PooledVectorRecord(); return PooledVectorRecord( mDataPtr, sequenceToUse.size(), sequenceToUse.offset(), sequenceToUse.stride() ); }
VectorRecord VectorRecord::pagedAndPageletTreePortion() const { IntegerSequence curSlice(size(), offset(), stride()); IntegerSequence restrictedSlice = curSlice.intersect(IntegerSequence(pagedAndPageletTreeValueCount())); if (!restrictedSlice.size()) return VectorRecord(); return VectorRecord( dataPtr(), restrictedSlice.size(), restrictedSlice.offset(), restrictedSlice.stride() ); }
bool VectorRecord::visitAnyLoadedValues( VectorDataManager* inVDM, boost::function2<void, ForaValueArray*, IntegerSequence> visitor, IntegerSequence subsequence ) { if (!dataPtr()) return false; subsequence = subsequence.intersect(IntegerSequence(size())); IntegerSequence subsequenceWithinVH( subsequence.size(), offset() + subsequence.offset() * stride(), stride() * subsequence.stride() ); return dataPtr()->visitAnyLoadedValues( inVDM, visitor, subsequenceWithinVH ); }
IntegerSequence indicesWithinHandle() const { return IntegerSequence(size(), offset(), stride()); }