int CBput(CB_INSTANCE* buffer, CB_BYTE_PTR src, int size) { pthread_mutex_lock(&buffer->mutex); CB_FREE_SPACE freeSpace = getFreeSpaceSize(buffer); if(freeSpace.planeA + freeSpace.planeB < size) { pthread_mutex_unlock(&buffer->mutex); return -1; } if(freeSpace.planeA) { int sizeA = freeSpace.planeA < size ? freeSpace.planeA : size; memcpy(buffer->tail, src, sizeA); src += sizeA; moveTail(buffer, sizeA); size -= sizeA; } if(size) { memcpy(buffer->tail, src, size); moveTail(buffer, size); } #ifdef __CB_LOG printf("0x%08x : PUT 0x%08x - 0x%08x\n", buffer->begin, buffer->head, buffer->tail); #endif pthread_mutex_unlock(&buffer->mutex); return 0; }
bool TailMotor::doMoveTail() { if(!Complete()) { moveTail(); return false; } else { return true; } }
int moveInfoContainsMove( MoveInfo *theMoveInfo, Move *theMove ) { Move *aMove; if( IsListEmpty( &theMoveInfo->mi_Moves )) return FALSE; for( aMove = moveHead( &theMoveInfo->mi_Moves ); aMove != moveSucc( moveTail( &theMoveInfo->mi_Moves )); aMove = moveSucc( aMove )) { if(( theMove->mv_SourceStack == aMove->mv_SourceStack )&& ( theMove->mv_DestStack == aMove->mv_DestStack )) return TRUE; } return FALSE; }