Program Listing for File SpinOrbitLockInfo.h¶
↰ Return to documentation for file (/home/kpenev/projects/git/poet/poet_src/Evolve/SpinOrbitLockInfo.h)
#ifndef __SPIN_ORBIT_LOCK_INFO
#define __SPIN_ORBIT_LOCK_INFO
#include "../Core/SharedLibraryExportMacros.h"
#include <iostream>
namespace Evolve {
//frequencies, not only when the orbital and spin periods are the same. In
class LIB_LOCAL SpinOrbitLockInfo {
private:
int __orbital_freq_mult,
__spin_freq_mult;
short __lock_direction;
public:
SpinOrbitLockInfo(
int orbital_freq_mult=0,
int spin_freq_mult=0,
short lock_direction=-1)
{set_lock(orbital_freq_mult, spin_freq_mult, lock_direction);}
SpinOrbitLockInfo(const SpinOrbitLockInfo &orig)
{set_lock(orig.orbital_frequency_multiplier(),
orig.spin_frequency_multiplier(),
orig.lock_direction());}
SpinOrbitLockInfo &operator=(const SpinOrbitLockInfo &rhs)
{set_lock(rhs.orbital_frequency_multiplier(),
rhs.spin_frequency_multiplier(),
rhs.lock_direction()); return *this;}
void set_lock(
int orbital_freq_mult,
int spin_freq_mult,
short lock_direction=0);
double spin(double orbital_frequency) const
{return (orbital_frequency*__orbital_freq_mult)/__spin_freq_mult;}
bool operator()(
int orbital_freq_mult,
int spin_freq_mult) const
{return (__lock_direction ? false :
term(orbital_freq_mult, spin_freq_mult));}
bool term(
int orbital_freq_mult,
int spin_freq_mult) const
{return (orbital_freq_mult * __spin_freq_mult
==
spin_freq_mult * __orbital_freq_mult);}
operator bool() const {return __lock_direction==0;}
short lock_direction() const {return __lock_direction;}
void lock_direction(short value) {__lock_direction=value;}
int orbital_frequency_multiplier() const {return __orbital_freq_mult;}
int spin_frequency_multiplier() const {return __spin_freq_mult;}
bool operator==(const SpinOrbitLockInfo &rhs) const;
};//End SpinOrbitLockInfo class.
LIB_LOCAL std::ostream &operator<<(std::ostream &os,
const SpinOrbitLockInfo &lock);
} //End Evolve namespace.
#endif