Пример #1
0
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;
}
Пример #2
0
bool TailMotor::doMoveTail() {
	if(!Complete()) {
		moveTail();
		return false;
	} else {
		return true;
	}
}
Пример #3
0
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;
}