Autonomy Software C++ 24.5.1
Welcome to the Autonomy Software repository of the Mars Rover Design Team (MRDT) at Missouri University of Science and Technology (Missouri S&T)! API reference contains the source code and other resources for the development of the autonomy software for our Mars rover. The Autonomy Software project aims to compete in the University Rover Challenge (URC) by demonstrating advanced autonomous capabilities and robust navigation algorithms.
Loading...
Searching...
No Matches
BS::thread_pool::blocks< T > Class Template Reference

A helper class to divide a range into blocks. Used by detach_blocks(), submit_blocks(), detach_loop(), and submit_loop(). More...

Collaboration diagram for BS::thread_pool::blocks< T >:

Public Member Functions

 blocks (const T first_index_, const T index_after_last_, const size_t num_blocks_)
 Construct a blocks object with the given specifications.
 
start (const size_t block) const
 Get the first index of a block.
 
end (const size_t block) const
 Get the index after the last index of a block.
 
size_t get_num_blocks () const
 Get the number of blocks. Note that this may be different than the desired number of blocks that was passed to the constructor.
 

Private Attributes

size_t block_size = 0
 The size of each block (except possibly the last block).
 
first_index = 0
 The first index in the range.
 
index_after_last = 0
 The index after the last index in the range.
 
size_t num_blocks = 0
 The number of blocks.
 
size_t remainder = 0
 The remainder obtained after dividing the total size by the number of blocks.
 

Detailed Description

template<typename T>
class BS::thread_pool::blocks< T >

A helper class to divide a range into blocks. Used by detach_blocks(), submit_blocks(), detach_loop(), and submit_loop().

Template Parameters
TThe type of the indices. Should be a signed or unsigned integer.

Constructor & Destructor Documentation

◆ blocks()

template<typename T >
BS::thread_pool::blocks< T >::blocks ( const T  first_index_,
const T  index_after_last_,
const size_t  num_blocks_ 
)
inline

Construct a blocks object with the given specifications.

Parameters
first_index_The first index in the range.
index_after_last_The index after the last index in the range.
num_blocks_The desired number of blocks to divide the range into.
965 : first_index(first_index_), index_after_last(index_after_last_), num_blocks(num_blocks_)
966 {
968 {
969 const size_t total_size = static_cast<size_t>(index_after_last - first_index);
970 if (num_blocks > total_size)
971 num_blocks = total_size;
972 block_size = total_size / num_blocks;
973 remainder = total_size % num_blocks;
974 if (block_size == 0)
975 {
976 block_size = 1;
977 num_blocks = (total_size > 1) ? total_size : 1;
978 }
979 }
980 else
981 {
982 num_blocks = 0;
983 }
984 }
size_t block_size
The size of each block (except possibly the last block).
Definition BS_thread_pool.hpp:1022
size_t num_blocks
The number of blocks.
Definition BS_thread_pool.hpp:1037
T index_after_last
The index after the last index in the range.
Definition BS_thread_pool.hpp:1032
T first_index
The first index in the range.
Definition BS_thread_pool.hpp:1027
size_t remainder
The remainder obtained after dividing the total size by the number of blocks.
Definition BS_thread_pool.hpp:1042

Member Function Documentation

◆ start()

template<typename T >
T BS::thread_pool::blocks< T >::start ( const size_t  block) const
inline

Get the first index of a block.

Parameters
blockThe block number.
Returns
The first index.
993 {
994 return first_index + static_cast<T>(block * block_size) + static_cast<T>(block < remainder ? block : remainder);
995 }
Here is the caller graph for this function:

◆ end()

template<typename T >
T BS::thread_pool::blocks< T >::end ( const size_t  block) const
inline

Get the index after the last index of a block.

Parameters
blockThe block number.
Returns
The index after the last index.
1004 {
1005 return (block == num_blocks - 1) ? index_after_last : start(block + 1);
1006 }
T start(const size_t block) const
Get the first index of a block.
Definition BS_thread_pool.hpp:992
Here is the caller graph for this function:

◆ get_num_blocks()

template<typename T >
size_t BS::thread_pool::blocks< T >::get_num_blocks ( ) const
inline

Get the number of blocks. Note that this may be different than the desired number of blocks that was passed to the constructor.

Returns
The number of blocks.
1014 {
1015 return num_blocks;
1016 }
Here is the caller graph for this function:

The documentation for this class was generated from the following file: