CARingBufferError CARingBuffer::Fetch(AudioBufferList *abl, UInt32 nFrames, SampleTime startRead) { SampleTime endRead = startRead + nFrames; SampleTime startRead0 = startRead; SampleTime endRead0 = endRead; CARingBufferError err = ClipTimeBounds(startRead, endRead); SampleTime readSizeFrames = endRead - startRead; if (err) { if ( readSizeFrames <= 0 ) { CARB_DEBUG( "POS1 read size frames too little. (%ld)\n", err ); return err; } } SInt32 destStartFrameOffset = startRead - startRead0; if ( destStartFrameOffset > 0 ) { CARB_DEBUG( "Fetch - Zeroing start bound\n" ); ZeroABL(abl, 0, destStartFrameOffset * mBytesPerFrame); } SInt32 destEndSize = endRead0 - endRead; if ( destEndSize > 0 ) { CARB_DEBUG( "Fetch - Zeroing end bound (%ld frames off)\n", destEndSize ); ZeroABL(abl, ( destStartFrameOffset + readSizeFrames ) * mBytesPerFrame, destEndSize * mBytesPerFrame); } Byte **buffers = mBuffers; int offset0 = FrameOffset(startRead); int offset1 = FrameOffset(endRead); int destStartByteOffset = destStartFrameOffset * mBytesPerFrame; int nbytes; if ( offset0 < offset1 ) { nbytes = offset1 - offset0; FetchABL( abl, destStartByteOffset , buffers, offset0, nbytes ); } else { nbytes = mCapacityBytes - offset0; FetchABL( abl, destStartByteOffset , buffers, offset0, nbytes ); FetchABL( abl, destStartByteOffset + nbytes, buffers, 0 , offset1 ); nbytes += offset1; } int nchannels = abl->mNumberBuffers; AudioBuffer *dest = abl->mBuffers; while (--nchannels >= 0) { dest->mDataByteSize = nbytes; dest++; } OSStatus err2 = ClipTimeBounds( startRead, endRead ); err2 = worse( err, err2 ); readSizeFrames = endRead - startRead; if ( err2 ) { if ( readSizeFrames <= 0 ) { CARB_DEBUG( "POS2 read size frames too little. (%ld)\n", err2 ); return err2; } } if ( err2 ) { CARB_DEBUG( "Returning error %ld.\n", err2 ); } return err2; }
int bi_weak_dom_restrict (const cost_t * v1, const cost_t * v2, uint dims) { assert (dims > 0); uint k = ffs(dims); dims >>= k; int i = k-1; /*printf("v1; "); println_double_tab (v1, 4); printf("v2; "); println_double_tab (v2, 4);*/ while (v1[i] == v2[i]) { if (dims <= 0) return -1; k = ffs(dims); dims >>= k; i += k; } if (better (v1[i], v2[i])) { // return 0 or 1 while (dims > 0) { k = ffs(dims); dims >>= k; i += k; if (worse (v1[i], v2[i])) return 0; } return 1; } else { // return 0 or -1 while (dims > 0) {
CARingBufferError CARingBuffer::Fetch(AudioBufferList *abl, UInt32 nFrames, SampleTime startRead, bool outOfBoundsOK) { SampleTime endRead = startRead + nFrames; SampleTime startRead0 = startRead; SampleTime endRead0 = endRead; SampleTime size; CARingBufferError err = CheckTimeBounds(startRead, endRead); size = endRead - startRead; if (err) { if (!outOfBoundsOK) return err; if (size <= 0) return err; // there is nothing to read } SInt32 destStartOffset = startRead - startRead0; if (destStartOffset > 0) { ZeroABL(abl, 0, destStartOffset * mBytesPerFrame); } SInt32 destEndSize = endRead0 - endRead; if (destEndSize > 0) { ZeroABL(abl, destStartOffset + size, destEndSize * mBytesPerFrame); } Byte **buffers = mBuffers; int offset0 = FrameOffset(startRead); int offset1 = FrameOffset(endRead); int nbytes; if (offset0 < offset1) { FetchABL(abl, destStartOffset, buffers, offset0, nbytes = offset1 - offset0); } else { nbytes = mCapacityBytes - offset0; FetchABL(abl, destStartOffset, buffers, offset0, nbytes); FetchABL(abl, destStartOffset + nbytes, buffers, 0, offset1); nbytes += offset1; } int nchannels = abl->mNumberBuffers; AudioBuffer *dest = abl->mBuffers; while (--nchannels >= 0) { dest->mDataByteSize = nbytes; dest++; } // have to check bounds again because the data may have been overwritten before we could finish reading it. OSStatus err2 = CheckTimeBounds(startRead, endRead); err2 = worse(err, err2); size = endRead - startRead; if (err2) { if (!outOfBoundsOK) return err2; if (size <= 0) return err2; // there is nothing to read } return err2; }
bool weak_dom (const cost_t * v1, const cost_t * v2, int p) { int i; for (i=0; i < p; i++) { #ifdef DOM_COUNT_COMP other_comp++; #endif if (worse (v1[i], v2[i])) return false; } return true; }
bool dom (const cost_t * v1, const cost_t * v2, int p) { int i; bool one_ineq = false; for (i=0; i < p; i++) { #ifdef DOM_COUNT_COMP other_comp++; #endif if (worse (v1[i], v2[i])) return false; else if (better (v1[i], v2[i])) one_ineq = true; } return one_ineq; }
int bi_weak_dom (const cost_t * v1, const cost_t * v2, int dim) { int i = 0; while (v1[i] == v2[i]) { i++; if (i == dim) return 1; } // i < first + p if (better (v1[i], v2[i])) { // return 0 or 1 for ( ; i<dim; i++) if (worse (v1[i], v2[i])) return 0; return 1; } else { // return 0 or -1 for ( ; i<dim; i++) if (better (v1[i], v2[i])) return 0; return -1; } }