blob: f187e35b404f64e4d4225e6143b29d790eb53e19 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2016 CEA LIST.
*
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Created on: 18 févr. 2013
*
* Contributors:
* Arnault Lapitre (CEA LIST) arnault.lapitre@cea.fr
* - Initial API and implementation
******************************************************************************/
#ifndef WAITINGBASICSTRATEGY_H_
#define WAITINGBASICSTRATEGY_H_
#include "WaitingStrategy.h"
namespace sep
{
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
// ALL WAITING STRATEGY
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
template< class BasicStrategy >
class WaitingBasicStrategyALL : public BasicStrategy
{
public:
/**
* CONSTRUCTOR
* Default
*/
WaitingBasicStrategyALL(avm_uint8_t queueCount = 1)
: BasicStrategy( queueCount )
{
//!! NOTHING
}
/**
* DESTRUCTOR
*/
virtual ~WaitingBasicStrategyALL()
{
//!! NOTHING
}
////////////////////////////////////////////////////////////////////////////
// POP WAITING BEHAVIOR API
////////////////////////////////////////////////////////////////////////////
inline virtual void popTo(ListOfExecutionContext & aReadyQueue)
{
aReadyQueue.splice(BasicStrategy::mQueueCache.nonempty() ?
BasicStrategy::mQueueCache : BasicStrategy::mQueue);
}
inline virtual void popTo(avm_uint8_t aQueueTableOffset,
ListOfExecutionContext & aReadyQueue)
{
aReadyQueue.splice( BasicStrategy::mQueueTable
[ (aQueueTableOffset < BasicStrategy::mQueueCount) ?
aQueueTableOffset : BasicStrategy::mQueueCount ] );
}
};
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
// BFS < BREADTH_FIRST_SEARCH > WAITING STRATEGY
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
class WaitingBasicStrategyBFS :
public WaitingStrategyImpl<
StrategyPushBack , ChildIteratorFIFO , StrategyPopFront >
{
public:
/**
* CONSTRUCTOR
* Default
*/
WaitingBasicStrategyBFS(avm_uint8_t queueCount = 1)
: WaitingStrategyImpl( queueCount )
{
//!! NOTHING
}
};
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
// DFS < DEPTH_FIRST_SEARCH > WAITING STRATEGY
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
class WaitingBasicStrategyDFS :
public WaitingStrategyImpl<
StrategyPushBack , ChildIteratorLIFO , StrategyPopBack >
{
public:
/**
* CONSTRUCTOR
* Default
*/
WaitingBasicStrategyDFS(avm_uint8_t queueCount = 1)
: WaitingStrategyImpl( queueCount )
{
//!! NOTHING
}
};
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
// RFS < RANDOM_FIRST_SEARCH > WAITING STRATEGY
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
class WaitingBasicStrategyRFS :
public WaitingStrategyImpl<
StrategyPushBack , ChildIteratorFIFO , StrategyPopRandom >
{
public:
/**
* CONSTRUCTOR
* Default
*/
WaitingBasicStrategyRFS(avm_uint8_t queueCount = 1)
: WaitingStrategyImpl( queueCount )
{
//!! NOTHING
}
/**
* DESTRUCTOR
*/
virtual ~WaitingBasicStrategyRFS()
{
//!! NOTHING
}
// UNDEF TOP FOR RANDOM ACCESS
inline virtual ExecutionContext * top()
{
AVM_OS_FATAL_ERROR_EXIT
<< "Illegal invocation of "
"<< WaitingBasicStrategyALL::top() >> !!!"
<< SEND_EXIT;
return( NULL );
}
inline virtual ExecutionContext * top(avm_uint8_t aQueueTableOffset)
{
AVM_OS_FATAL_ERROR_EXIT
<< "Illegal invocation of "
"<< WaitingBasicStrategyRFS::top(queueOffset) >> !!!"
<< SEND_EXIT;
return( NULL );
}
inline virtual ExecutionContext * topFrom(ListOfExecutionContext & aQueue)
{
AVM_OS_FATAL_ERROR_EXIT
<< "Illegal invocation of "
"<< WaitingBasicStrategyRFS::topFrom(queue) >> !!!"
<< SEND_EXIT;
return( NULL );
}
};
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
// FIRST WAITING STRATEGY
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
class WaitingBasicStrategyFIRST :
public WaitingStrategyImpl<
StrategyPushFront , ChildIteratorLIFO , StrategyPopFront >
{
public:
/**
* CONSTRUCTOR
* Default
*/
WaitingBasicStrategyFIRST(avm_uint8_t queueCount = 1)
: WaitingStrategyImpl( queueCount )
{
//!! NOTHING
}
};
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
// LAST WAITING STRATEGY
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
class WaitingBasicStrategyLAST :
public WaitingStrategyImpl<
StrategyPushBack , ChildIteratorLIFO , StrategyPopBack >
{
public:
/**
* CONSTRUCTOR
* Default
*/
WaitingBasicStrategyLAST(avm_uint8_t queueCount = 1)
: WaitingStrategyImpl( queueCount )
{
//!! NOTHING
}
};
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
// ORDER WAITING STRATEGY
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
class WaitingBasicStrategyORDER :
public WaitingStrategyImpl<
StrategyPushOrder , ChildIteratorFIFO , StrategyPopFront >
{
public:
/**
* CONSTRUCTOR
* Default
*/
WaitingBasicStrategyORDER(avm_uint8_t queueCount = 1)
: WaitingStrategyImpl( queueCount )
{
//!! NOTHING
}
};
} /* namespace sep */
#endif /* WAITINGBASICSTRATEGY_H_ */