CnC
 All Classes Namespaces Functions Variables Typedefs Enumerator Friends Groups Pages
Public Types | Public Member Functions
tag_partitioner< grainSize > Class Template Reference

List of all members.

Public Types

typedef range_is_tag_type split_type
- Public Types inherited from default_partitioner< grainSize >

Public Member Functions

template<typename Range , typename StepInstance >
bool divide_and_originate (Range &range, StepInstance &si) const
 divide given range into in arbitrary number of ranges of type Range

Additional Inherited Members

- Protected Member Functions inherited from default_partitioner< grainSize >
template<typename Range >
bool is_divisible (const Range &range) const
 return true, if given range is divisible, false otherwise
int grain_size (size_t fullRangeSize) const

Detailed Description

template<int grainSize = 0>
class CnC::tag_partitioner< grainSize >

Use this instead of default_partitioner if your tag is self-dividing (e.g. a range) and you want to use the partitioning mechanism through cnC::tag_collection::put_range

Definition at line 172 of file default_partitioner.h.


Member Typedef Documentation

typedef range_is_tag_type split_type

set to range_is_tag_type if tag is self-dividing, e.g. if the range-type is also the tag-type as passed to the step set to range_is_range_type if tag is undivisible, e.g. if range-type != step_type

Reimplemented from default_partitioner< grainSize >.

Definition at line 177 of file default_partitioner.h.


Member Function Documentation

bool divide_and_originate ( Range &  range,
StepInstance &  si 
) const
inline

divide given range into in arbitrary number of ranges of type Range

Call si.originate_range( r ) for each new range. The original - but modified - range must not be passed to originate_range! If tag-types are self-dividing (e.g. if range-type == tag-type) you should call "originate" instead of "originate_range" for leaves of the recursive range-tree.

Returns:
true if the orignal - but modified - range needs further splitting, false if no further splitting is desired.

The aggregated set of the members of the sub-ranges applied to "t.originate[_range]" must equal the set of member in given range. Overlapping ranges or gaps may lead to arbitrary effects.

Parameters:
rangethe original range to split, may be altered
siopaque object, call t.originate[_range]( r ) for all split-off sub-ranges

Reimplemented from default_partitioner< grainSize >.

Definition at line 205 of file default_partitioner.h.

{
return this->divide_and_originate( range, si, this->grain_size( range.size() ) );
}

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