MADARA  3.4.1
madara::knowledge::containers::LegacyBarrier Class Reference

This class stores an integer within a variable context. More...

#include <LegacyBarrier.h>

Inheritance diagram for madara::knowledge::containers::LegacyBarrier:
madara::knowledge::containers::BaseContainer

Public Types

typedef knowledge::KnowledgeRecord::Integer type
 trait that describes the value type More...
 

Public Member Functions

 LegacyBarrier (const KnowledgeUpdateSettings &settings=KnowledgeUpdateSettings())
 Default constructor. More...
 
 LegacyBarrier (const LegacyBarrier &rhs)
 Copy constructor. More...
 
 LegacyBarrier (const std::string &name, KnowledgeBase &knowledge, const KnowledgeUpdateSettings &settings=KnowledgeUpdateSettings())
 Constructor. More...
 
 LegacyBarrier (const std::string &name, KnowledgeBase &knowledge, int id, int participants, const KnowledgeUpdateSettings &settings=KnowledgeUpdateSettings())
 Default constructor. More...
 
 LegacyBarrier (const std::string &name, Variables &knowledge, const KnowledgeUpdateSettings &settings=KnowledgeUpdateSettings())
 Constructor. More...
 
 LegacyBarrier (const std::string &name, Variables &knowledge, int id, int participants, const KnowledgeUpdateSettings &settings=KnowledgeUpdateSettings())
 Default constructor. More...
 
 ~LegacyBarrier ()
 Destructor. More...
 
virtual BaseContainerclone (void) const
 Clones this container. More...
 
std::string get_debug_info (void)
 Returns the type of the container along with name and any other useful information. More...
 
size_t get_id (void) const
 Returns the id of the barrier in the barrier ring. More...
 
std::string get_name (void) const
 Returns the name of the container. More...
 
size_t get_participants (void) const
 Returns the number of participants in the barrier ring. More...
 
type get_round (void) const
 Returns the current barrier round. More...
 
KnowledgeUpdateSettings get_settings (void)
 Gets the update settings for the container. More...
 
bool is_done (void)
 Wait for all other participants to reach your barrier round. More...
 
bool is_false (void) const
 Determines if the barrier is false. More...
 
bool is_true (void) const
 Determines if the barrier is true. More...
 
void modify (void)
 Mark the value as modified. More...
 
virtual bool modify_if_false (BaseContainer &conditional)
 Modifies the container if the argument is false. More...
 
virtual bool modify_if_true (BaseContainer &conditional)
 Modifies the container if the argument is true. More...
 
void next (void)
 Goes to the next barrier round. More...
 
bool operator!= (const LegacyBarrier &value) const
 Checks for inequality. More...
 
void operator= (const LegacyBarrier &rhs)
 Assignment operator. More...
 
type operator= (type value)
 Sets the value of the variable. More...
 
bool operator== (const LegacyBarrier &value) const
 Checks for equality. More...
 
void resize (size_t id=0, size_t participants=1)
 Resizes the barrier, usually when number of participants change. More...
 
void set (type value)
 Sets the barrier to a specific round. More...
 
void set_name (const std::string &var_name, KnowledgeBase &knowledge, int id, int participants)
 Sets the variable name that this refers to. More...
 
void set_name (const std::string &var_name, ThreadSafeContext &knowledge, int id, int participants)
 Sets the variable name that this refers to. More...
 
void set_name (const std::string &var_name, Variables &knowledge, int id, int participants)
 Sets the variable name that this refers to. More...
 
void set_quality (uint32_t quality, const KnowledgeReferenceSettings &settings=KnowledgeReferenceSettings(false))
 Sets the quality of writing to the barrier variables. More...
 
void set_settings (const KnowledgeUpdateSettings &settings)
 Sets the update settings for the container. More...
 
double to_double (void) const
 Returns the barrier round number as a double. More...
 
knowledge::KnowledgeRecord::Integer to_integer (void) const
 Returns the barrier round number as an integer (same as *) More...
 
knowledge::KnowledgeRecord to_record (void) const
 Returns the barrier round number as a knowledge::KnowledgeRecord. More...
 
std::string to_string (void) const
 Returns the barrier round number as a string. More...
 

Protected Attributes

MADARA_LOCK_TYPE mutex_
 guard for access and changes More...
 
std::string name_
 Prefix of variable. More...
 
KnowledgeUpdateSettings settings_
 Settings for modifications. More...
 

Private Member Functions

type barrier_result (void) const
 Checks if current barrier is successful. More...
 
void build_aggregate_barrier (void)
 Builds the aggregate barrier logic. More...
 
void build_var (void)
 Builds the variable that is actually incremented. More...
 
virtual std::string get_debug_info_ (void)
 Returns the type of the container along with name and any other useful information. More...
 
void init_noharm (void)
 Initialize the no harm eval settings. More...
 
virtual bool is_false_ (void) const
 Polymorphic is false method which can be used to determine if at least one value in the container is false. More...
 
virtual bool is_true_ (void) const
 Polymorphic is true method which can be used to determine if all values in the container are true. More...
 
virtual void modify_ (void)
 Polymorphic modify method used by collection containers. More...
 

Private Attributes

CompiledExpression aggregate_barrier_
 Expression for aggregating barrier in one atomic operation. More...
 
ThreadSafeContextcontext_
 Variable context that we are modifying. More...
 
size_t id_
 id of this barrier in the barrier ring More...
 
EvalSettings no_harm
 Settings we'll use for all evaluations. More...
 
size_t participants_
 the number of participants in the barrier ring More...
 
VariableReference variable_
 Variable reference. More...
 
std::string variable_name_
 Holder for variable name to quickly refresh modified status. More...
 

Detailed Description

This class stores an integer within a variable context.

Definition at line 31 of file LegacyBarrier.h.

Member Typedef Documentation

◆ type

trait that describes the value type

Definition at line 35 of file LegacyBarrier.h.

Constructor & Destructor Documentation

◆ LegacyBarrier() [1/6]

madara::knowledge::containers::LegacyBarrier::LegacyBarrier ( const KnowledgeUpdateSettings settings = KnowledgeUpdateSettings())

Default constructor.

Definition at line 8 of file LegacyBarrier.cpp.

◆ LegacyBarrier() [2/6]

madara::knowledge::containers::LegacyBarrier::LegacyBarrier ( const std::string &  name,
KnowledgeBase knowledge,
const KnowledgeUpdateSettings settings = KnowledgeUpdateSettings() 
)

Constructor.

Parameters
namename of the integer in the knowledge base
knowledgethe knowledge base that will contain the vector
settingssettings for evaluating the vector

Definition at line 15 of file LegacyBarrier.cpp.

◆ LegacyBarrier() [3/6]

madara::knowledge::containers::LegacyBarrier::LegacyBarrier ( const std::string &  name,
Variables knowledge,
const KnowledgeUpdateSettings settings = KnowledgeUpdateSettings() 
)

Constructor.

Parameters
namethe name of the map within the variable context
knowledgethe variable context
settingssettings to apply by default

Definition at line 27 of file LegacyBarrier.cpp.

◆ LegacyBarrier() [4/6]

madara::knowledge::containers::LegacyBarrier::LegacyBarrier ( const std::string &  name,
KnowledgeBase knowledge,
int  id,
int  participants,
const KnowledgeUpdateSettings settings = KnowledgeUpdateSettings() 
)

Default constructor.

Parameters
namename of the integer in the knowledge base
knowledgethe knowledge base that will contain the vector
idthe id of the barrier in the barrier ring
participantsthe number of participants in the barrier ring
settingssettings for evaluating the vector

Definition at line 39 of file LegacyBarrier.cpp.

◆ LegacyBarrier() [5/6]

madara::knowledge::containers::LegacyBarrier::LegacyBarrier ( const std::string &  name,
Variables knowledge,
int  id,
int  participants,
const KnowledgeUpdateSettings settings = KnowledgeUpdateSettings() 
)

Default constructor.

Parameters
namename of the integer in the knowledge base
knowledgethe knowledge base that will contain the vector
idthe id of the barrier in the barrier ring
participantsthe number of participants in the barrier ring
settingssettings for evaluating the vector

Definition at line 52 of file LegacyBarrier.cpp.

◆ LegacyBarrier() [6/6]

madara::knowledge::containers::LegacyBarrier::LegacyBarrier ( const LegacyBarrier rhs)

Copy constructor.

Definition at line 65 of file LegacyBarrier.cpp.

◆ ~LegacyBarrier()

madara::knowledge::containers::LegacyBarrier::~LegacyBarrier ( )

Destructor.

Definition at line 78 of file LegacyBarrier.cpp.

Member Function Documentation

◆ barrier_result()

type madara::knowledge::containers::LegacyBarrier::barrier_result ( void  ) const
inlineprivate

Checks if current barrier is successful.

Returns
0 if unsuccessful, otherwise it is successful

Definition at line 310 of file LegacyBarrier.h.

◆ build_aggregate_barrier()

void madara::knowledge::containers::LegacyBarrier::build_aggregate_barrier ( void  )
private

Builds the aggregate barrier logic.

Definition at line 99 of file LegacyBarrier.cpp.

◆ build_var()

void madara::knowledge::containers::LegacyBarrier::build_var ( void  )
private

Builds the variable that is actually incremented.

Definition at line 149 of file LegacyBarrier.cpp.

◆ clone()

madara::knowledge::containers::BaseContainer * madara::knowledge::containers::LegacyBarrier::clone ( void  ) const
virtual

Clones this container.

Returns
a deep copy of the container that must be managed by the user (i.e., you have to delete the return value)

Implements madara::knowledge::containers::BaseContainer.

Definition at line 421 of file LegacyBarrier.cpp.

◆ get_debug_info()

std::string madara::knowledge::containers::LegacyBarrier::get_debug_info ( void  )

Returns the type of the container along with name and any other useful information.

The provided information should be useful for developers wishing to debug container operations, especially as it pertains to pending network operations (i.e., when used in conjunction with modify)

Returns
info in format {container}: {name}{ = value, if appropriate}

Definition at line 375 of file LegacyBarrier.cpp.

◆ get_debug_info_()

std::string madara::knowledge::containers::LegacyBarrier::get_debug_info_ ( void  )
privatevirtual

Returns the type of the container along with name and any other useful information.

The provided information should be useful for developers wishing to debug container operations, especially as it pertains to pending network operations (i.e., when used in conjunction with modify)

Returns
info in format {container}: {name}{ = value, if appropriate}

Implements madara::knowledge::containers::BaseContainer.

Definition at line 415 of file LegacyBarrier.cpp.

◆ get_id()

size_t madara::knowledge::containers::LegacyBarrier::get_id ( void  ) const

Returns the id of the barrier in the barrier ring.

Returns
the id of the barrier

Definition at line 191 of file LegacyBarrier.cpp.

◆ get_name()

std::string madara::knowledge::containers::BaseContainer::get_name ( void  ) const
inlineinherited

Returns the name of the container.

Returns
name of the container

Definition at line 4 of file BaseContainer.inl.

◆ get_participants()

size_t madara::knowledge::containers::LegacyBarrier::get_participants ( void  ) const

Returns the number of participants in the barrier ring.

Returns
the number of participants barriering

Definition at line 197 of file LegacyBarrier.cpp.

◆ get_round()

type madara::knowledge::containers::LegacyBarrier::get_round ( void  ) const
inline

Returns the current barrier round.

Returns
the current barrier round number

Definition at line 116 of file LegacyBarrier.h.

◆ get_settings()

madara::knowledge::KnowledgeUpdateSettings madara::knowledge::containers::BaseContainer::get_settings ( void  )
inherited

Gets the update settings for the container.

Returns
the current settings

Definition at line 29 of file BaseContainer.cpp.

◆ init_noharm()

void madara::knowledge::containers::LegacyBarrier::init_noharm ( void  )
private

Initialize the no harm eval settings.

Definition at line 181 of file LegacyBarrier.cpp.

◆ is_done()

bool madara::knowledge::containers::LegacyBarrier::is_done ( void  )

Wait for all other participants to reach your barrier round.

Returns
true if barrier round is finished. False otherwise.

Definition at line 325 of file LegacyBarrier.cpp.

◆ is_false()

bool madara::knowledge::containers::LegacyBarrier::is_false ( void  ) const

Determines if the barrier is false.

Returns
true if the barrier is false

Definition at line 485 of file LegacyBarrier.cpp.

◆ is_false_()

bool madara::knowledge::containers::LegacyBarrier::is_false_ ( void  ) const
privatevirtual

Polymorphic is false method which can be used to determine if at least one value in the container is false.

Implements madara::knowledge::containers::BaseContainer.

Definition at line 495 of file LegacyBarrier.cpp.

◆ is_true()

bool madara::knowledge::containers::LegacyBarrier::is_true ( void  ) const

Determines if the barrier is true.

Returns
true if the barrier is true

Definition at line 465 of file LegacyBarrier.cpp.

◆ is_true_()

bool madara::knowledge::containers::LegacyBarrier::is_true_ ( void  ) const
privatevirtual

Polymorphic is true method which can be used to determine if all values in the container are true.

Implements madara::knowledge::containers::BaseContainer.

Definition at line 490 of file LegacyBarrier.cpp.

◆ modify()

void madara::knowledge::containers::LegacyBarrier::modify ( void  )

Mark the value as modified.

The barrier retains the same value but will resend its value as if it had been modified.

Definition at line 367 of file LegacyBarrier.cpp.

◆ modify_()

void madara::knowledge::containers::LegacyBarrier::modify_ ( void  )
privatevirtual

Polymorphic modify method used by collection containers.

This method calls the modify method for this class. We separate the faster version (modify) from this version (modify_) to allow users the opportunity to have a fastery version that does not use polymorphic functions (generally virtual functions are half as efficient as normal function calls)

Implements madara::knowledge::containers::BaseContainer.

Definition at line 410 of file LegacyBarrier.cpp.

◆ modify_if_false()

bool madara::knowledge::containers::BaseContainer::modify_if_false ( BaseContainer conditional)
virtualinherited

Modifies the container if the argument is false.

Parameters
conditionalthe container that must be false to modify
Returns
true if the container was modified

Definition at line 56 of file BaseContainer.cpp.

◆ modify_if_true()

bool madara::knowledge::containers::BaseContainer::modify_if_true ( BaseContainer conditional)
virtualinherited

Modifies the container if the argument is true.

Parameters
conditionalthe container that must be true to modify
Returns
true if the container was modified

Definition at line 36 of file BaseContainer.cpp.

◆ next()

void madara::knowledge::containers::LegacyBarrier::next ( void  )

Goes to the next barrier round.

Definition at line 315 of file LegacyBarrier.cpp.

◆ operator!=()

bool madara::knowledge::containers::LegacyBarrier::operator!= ( const LegacyBarrier value) const

Checks for inequality.

Parameters
valuethe value to compare to
Returns
true if inequal, false otherwise

◆ operator=() [1/2]

void madara::knowledge::containers::LegacyBarrier::operator= ( const LegacyBarrier rhs)

Assignment operator.

Parameters
rhsvalue to copy

Definition at line 80 of file LegacyBarrier.cpp.

◆ operator=() [2/2]

madara::knowledge::containers::LegacyBarrier::type madara::knowledge::containers::LegacyBarrier::operator= ( type  value)

Sets the value of the variable.

Parameters
valuethe new value of the variable
Returns
the updated value (should be same as value param)

Definition at line 273 of file LegacyBarrier.cpp.

◆ operator==()

bool madara::knowledge::containers::LegacyBarrier::operator== ( const LegacyBarrier value) const

Checks for equality.

Parameters
valuethe value to compare to
Returns
true if equal, false otherwise

◆ resize()

void madara::knowledge::containers::LegacyBarrier::resize ( size_t  id = 0,
size_t  participants = 1 
)

Resizes the barrier, usually when number of participants change.

Parameters
idthe id of this barrier in the barrier ring
participantsthe number of participants in barrier ring

Definition at line 256 of file LegacyBarrier.cpp.

◆ set()

void madara::knowledge::containers::LegacyBarrier::set ( type  value)

Sets the barrier to a specific round.

Returns
the barrier round number

Definition at line 359 of file LegacyBarrier.cpp.

◆ set_name() [1/3]

void madara::knowledge::containers::LegacyBarrier::set_name ( const std::string &  var_name,
KnowledgeBase knowledge,
int  id,
int  participants 
)

Sets the variable name that this refers to.

Parameters
var_namethe name of the variable in the knowledge base
knowledgethe knowledge base the variable is housed in
idthe id of the barrier in the barrier ring
participantsthe number of participants in the barrier ring

Definition at line 203 of file LegacyBarrier.cpp.

◆ set_name() [2/3]

void madara::knowledge::containers::LegacyBarrier::set_name ( const std::string &  var_name,
ThreadSafeContext knowledge,
int  id,
int  participants 
)

Sets the variable name that this refers to.

Parameters
var_namethe name of the variable in the knowledge base
knowledgethe knowledge base the variable is housed in
idthe id of the barrier in the barrier ring
participantsthe number of participants in the barrier ring

Definition at line 238 of file LegacyBarrier.cpp.

◆ set_name() [3/3]

void madara::knowledge::containers::LegacyBarrier::set_name ( const std::string &  var_name,
Variables knowledge,
int  id,
int  participants 
)

Sets the variable name that this refers to.

Parameters
var_namethe name of the variable in the knowledge base
knowledgethe knowledge base the variable is housed in
idthe id of the barrier in the barrier ring
participantsthe number of participants in the barrier ring

Definition at line 221 of file LegacyBarrier.cpp.

◆ set_quality()

void madara::knowledge::containers::LegacyBarrier::set_quality ( uint32_t  quality,
const KnowledgeReferenceSettings settings = KnowledgeReferenceSettings(          false) 
)

Sets the quality of writing to the barrier variables.

Parameters
qualityquality of writing to this location
settingssettings for referring to knowledge variables

Definition at line 454 of file LegacyBarrier.cpp.

◆ set_settings()

void madara::knowledge::containers::BaseContainer::set_settings ( const KnowledgeUpdateSettings settings)
inherited

Sets the update settings for the container.

Parameters
settingsthe new settings to use

Definition at line 20 of file BaseContainer.cpp.

◆ to_double()

double madara::knowledge::containers::LegacyBarrier::to_double ( void  ) const

Returns the barrier round number as a double.

Returns
the value as a double

Definition at line 426 of file LegacyBarrier.cpp.

◆ to_integer()

madara::knowledge::KnowledgeRecord::Integer madara::knowledge::containers::LegacyBarrier::to_integer ( void  ) const

Returns the barrier round number as an integer (same as *)

Returns
the value as an integer

Definition at line 301 of file LegacyBarrier.cpp.

◆ to_record()

madara::knowledge::KnowledgeRecord madara::knowledge::containers::LegacyBarrier::to_record ( void  ) const

Returns the barrier round number as a knowledge::KnowledgeRecord.

This is useful for referencing clock and other record info.

Returns
the value as a knowledge::KnowledgeRecord

Definition at line 286 of file LegacyBarrier.cpp.

◆ to_string()

std::string madara::knowledge::containers::LegacyBarrier::to_string ( void  ) const

Returns the barrier round number as a string.

Returns
the value as a string

Definition at line 440 of file LegacyBarrier.cpp.

Member Data Documentation

◆ aggregate_barrier_

CompiledExpression madara::knowledge::containers::LegacyBarrier::aggregate_barrier_
private

Expression for aggregating barrier in one atomic operation.

Definition at line 354 of file LegacyBarrier.h.

◆ context_

ThreadSafeContext* madara::knowledge::containers::LegacyBarrier::context_
mutableprivate

Variable context that we are modifying.

Definition at line 333 of file LegacyBarrier.h.

◆ id_

size_t madara::knowledge::containers::LegacyBarrier::id_
private

id of this barrier in the barrier ring

Definition at line 343 of file LegacyBarrier.h.

◆ mutex_

MADARA_LOCK_TYPE madara::knowledge::containers::BaseContainer::mutex_
mutableprotectedinherited

guard for access and changes

Mutex for local changes

Definition at line 136 of file BaseContainer.h.

◆ name_

std::string madara::knowledge::containers::BaseContainer::name_
protectedinherited

Prefix of variable.

Definition at line 146 of file BaseContainer.h.

◆ no_harm

EvalSettings madara::knowledge::containers::LegacyBarrier::no_harm
private

Settings we'll use for all evaluations.

Definition at line 360 of file LegacyBarrier.h.

◆ participants_

size_t madara::knowledge::containers::LegacyBarrier::participants_
private

the number of participants in the barrier ring

Definition at line 348 of file LegacyBarrier.h.

◆ settings_

KnowledgeUpdateSettings madara::knowledge::containers::BaseContainer::settings_
protectedinherited

Settings for modifications.

Definition at line 151 of file BaseContainer.h.

◆ variable_

VariableReference madara::knowledge::containers::LegacyBarrier::variable_
private

Variable reference.

Definition at line 338 of file LegacyBarrier.h.

◆ variable_name_

std::string madara::knowledge::containers::LegacyBarrier::variable_name_
private

Holder for variable name to quickly refresh modified status.

Definition at line 365 of file LegacyBarrier.h.


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