mirror of
https://github.com/CoolProp/CoolProp.git
synced 2026-01-10 22:48:05 -05:00
83 lines
1.7 KiB
C++
83 lines
1.7 KiB
C++
/*
|
|
* CachedElement.h
|
|
*
|
|
* Created on: 21 Dec 2013
|
|
* Author: jowr
|
|
*/
|
|
|
|
#ifndef CACHEDELEMENT_H_
|
|
#define CACHEDELEMENT_H_
|
|
|
|
#include "CoolPropTools.h"
|
|
#include "DataStructures.h"
|
|
|
|
namespace CoolProp {
|
|
|
|
/*!
|
|
A class that contains the magic to cache a value.
|
|
|
|
Includes an "=" assignment operator and casting to boolean
|
|
so you can do something like::
|
|
|
|
double CoolPropStateClassSI::d3phir_dTau3(double tau, double delta){
|
|
if (cache.d3phir_dTau3) {
|
|
return cache.d3phir_dTau3;
|
|
} else {
|
|
cache.d3phir_dTau3 = pFluid->d3phir_dTau3(tau,delta);
|
|
return cache.d3phir_dTau3;
|
|
}
|
|
};
|
|
*/
|
|
|
|
class CachedElement {
|
|
|
|
private:
|
|
bool is_cached;
|
|
long double value;
|
|
public:
|
|
/// Default constructor
|
|
CachedElement() {
|
|
this->clear();
|
|
};
|
|
|
|
/// Function to carry out the caching
|
|
void _do_cache(double value)
|
|
{
|
|
this->value = value;
|
|
this->is_cached = true;
|
|
}
|
|
|
|
/// Assignment operator - sets the value and sets the flag
|
|
void operator=(const double& value) {
|
|
_do_cache(value);
|
|
};
|
|
|
|
/// Cast to boolean, for checking if cached
|
|
operator bool() {return is_cached;};
|
|
|
|
/// Cast to double, for returning value
|
|
operator double() {
|
|
if (is_cached) {return static_cast<double>(value); }
|
|
else {
|
|
throw std::exception();
|
|
}
|
|
}
|
|
operator long double() {
|
|
if (is_cached) {return value; }
|
|
else {
|
|
throw std::exception();
|
|
}
|
|
}
|
|
/// Clear the flag and the value
|
|
void clear() {
|
|
is_cached = false;
|
|
this->value = _HUGE;
|
|
};
|
|
long double &pt(){
|
|
return this->value;
|
|
}
|
|
};
|
|
|
|
} /* namespace CoolProp */
|
|
#endif /* CACHEDELEMENT_H_ */
|