Beispiel #1
0
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;
	}
Beispiel #2
0
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()
		);
	}
Beispiel #3
0
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()
		);
	}
Beispiel #4
0
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
		);
	}
Beispiel #5
0
	IntegerSequence indicesWithinHandle() const
		{
		return IntegerSequence(size(), offset(), stride());
		}