Files
Extern/C3d/Include/pars_variable.h
SaraP 52f91a1dbb Extern :
- C3d aggiornamento librerie ( 118037).
2025-06-05 08:23:20 +02:00

172 lines
8.8 KiB
C++

////////////////////////////////////////////////////////////////////////////////
/**
\file
\brief \ru Переменная.
\en Variable. \~
*/
////////////////////////////////////////////////////////////////////////////////
#ifndef __MBVARIABLE_H
#define __MBVARIABLE_H
#include <pars_tree_variable.h>
#include <math_define.h>
#include <mb_variables.h>
#include <io_tape_define.h>
#include <io_define.h>
//-----------------------------------------------------------------------------
/** \brief \ru Координата.
\en Coordinate. \~
\details \ru Координата. \n
\en Coordinate. \n \~
\ingroup Parser
*/
// ---
class MATH_CLASS MbCoord : public ItCoord
{
private:
double m_coord; // \ru Значение координаты. \en A value of coordinate.
public:
/// \ru Конструктор по значению. \en Constructor by the value.
MbCoord( double v ) : m_coord(v) {}
/// \ru Установить значение. \en Set value.
virtual void SetValue( double v ){ m_coord = v; }
/// \ru Получить значение. \en Get the value.
virtual double GetValue() const { return m_coord; }
/// \ru Вычислить размер координаты в байтах. \en Get size of coordinate in bytes.
size_t SizeOf() const { return sizeof(double);}
/// \ru Операторы чтения, записи. \en Reading and writing operators.
KNOWN_OBJECTS_RW_REF_OPERATORS( MbCoord );
};
//-----------------------------------------------------------------------------
/** \brief \ru Вещественная переменная.
\en Real variable. \~
\details \ru Вещественная переменная. \n
\en Real variable. \n \~
\ingroup Parser
*/
// ---
class MATH_CLASS MbTreeVariable : public TapeBase, public ItTreeVariable
{
private:
MbCoord m_coord; ///< \ru Координата. \en Coordinate.
c3d::string_t m_name; ///< \ru Имя переменной. \en A name of variable.
mutable size_t useCount; ///< \ru Количество использований. \en The number of uses.
public:
/// \ru Конструктор по имени и значению. \en Constructor by the name and the value.
MbTreeVariable( const c3d::string_t & name, double v );
/// \ru Деструктор. \en Destructor.
virtual ~MbTreeVariable();
public:
/// \ru Получить имя. \en Get name.
const c3d::string_t & GetName () const override { return m_name; }
/// \ru Установить имя. \en Set name.
void SetName ( const c3d::string_t & name ) override { m_name = name; }
/// \ru Установить имя. Обработка нулевого указателя. \en Set name. Null pointer processing.
void SetName( const TCHAR* s ) override { m_name.assign( s ? s : _T("") ); };
/// \ru Получение значение. \en Get value.
double GetValue () const override { return m_coord.GetValue(); }
/// \ru Установить значение. \en Set value.
void SetValue ( double v ) override { m_coord.SetValue( v ); }
/// \ru Дать строковую переменную. \en Get string variable.
void GetStringValue( c3d::string_t & ) const override {}
/// \ru Установить строковую переменную. \en Set string variable.
void SetStringValue( const c3d::string_t & ) override {}
/// \ru Получить координату. \en Get coordinate.
const MbCoord & GetCoord () const override { return m_coord; }
/// \ru Вычислить размер переменной в байтах. \en Get size of variable in bytes.
size_t SizeOf() const override { return m_coord.SizeOf() + sizeof(m_name) + sizeof(size_t); }
/// \ru Дать тип переменной. \en Get type of variable.
VarType IsA() const override { return VarType::vr_double; }
/// \ru Создать копию переменной. \en Create a copy of variable.
MbTreeVariable & Duplicate() const { return *new MbTreeVariable( GetName(), GetValue() ); }
/// \ru Увеличить счетчик использований. \en Increase a counter of uses.
refcount_t AddRef () const override { return ++useCount; }
/// \ru Уменьшить счетчик использований и удалить объект, если он никому уже не нужен. \en Decrease a counter of uses and delete an object if it is not used any more.
refcount_t Release() const override;
/// \ru Операторы чтения, записи. \en Reading and writing operators.
DECLARE_PERSISTENT_CLASS_NEW_DEL( MbTreeVariable )
};
IMPL_PERSISTENT_OPS( MbTreeVariable )
//-----------------------------------------------------------------------------
/** \brief \ru Строковая переменная дерева разбора выражения.
\en String variable for an expression parse tree. \~
\details \ru Строковая переменная дерева разбора выражения.
\en String variable for an expression parse tree. \~
\ingroup Parser
*/
// ---
class MATH_CLASS MbTreeStringVariable : public TapeBase, public ItTreeVariable
{
private:
c3d::string_t m_name; ///< \ru Имя переменной. \en A name of variable.
c3d::string_t m_value; ///< \ru Строковое значение переменной. \en A string value of variable.
MbCoord m_coord; ///< \ru Вспомогательный объект, используется для совместимости интерфейса. \en Auxiliary object, used for interface compatibility.
mutable size_t m_useCount; ///< \ru Количество использований. \en The number of uses.
public:
/// \ru Конструктор по имени и значению. \en Constructor by the name and the value.
MbTreeStringVariable( const c3d::string_t & name, const c3d::string_t & value )
: m_name ( name )
, m_value ( value )
, m_coord ( -MB_MAXDOUBLE )
, m_useCount( 0 )
{}
/// \ru Деструктов. \en Destructor.
virtual ~MbTreeStringVariable() {}
public:
/// \ru Получить имя. \en Get name.
const c3d::string_t & GetName () const override { return m_name; }
/// \ru Установить имя. \en Set name.
void SetName ( const c3d::string_t & name ) override { m_name = name; }
/// \ru Установить имя. Обработка нулевого указателя. \en Set name. Null pointer processing.
void SetName( const TCHAR* s ) override { m_name.assign(s ? s : _T("")); };
/// \ru Дать строковую переменную. \en Get string variable.
void GetStringValue( c3d::string_t & value ) const override { value = m_value; }
/// \ru Установить строковую переменную. \en Set string variable.
void SetStringValue( const c3d::string_t & value ) override { m_value = value; }
/// \ru Вычислить размер переменной в байтах. \en Get size of variable in bytes.
size_t SizeOf() const override { return sizeof(m_name) + sizeof(m_value) + sizeof(MbCoord) + sizeof(size_t); }
/// \ru Дать тип переменной. \en Get type of variable.
VarType IsA() const override { return VarType::vr_string; }
/// \ru Создать копию переменной. \en Create a copy of variable.
MbTreeStringVariable & Duplicate() const { return *new MbTreeStringVariable(m_name, m_value); }
/// \ru Дать переменную. \en Get variable.
double GetValue() const override { return -MB_MAXDOUBLE; }
/// \ru Установить переменную. \en Set variable.
void SetValue( double ) override {}
/// \ru Дать координату. \en Get coordinate.
const ItCoord & GetCoord() const override { return m_coord; }
/// \ru Увеличить счетчик использований. \en Increase a counter of uses.
refcount_t AddRef () const override { return ++m_useCount; }
/// \ru Уменьшить счетчик использований и удалить объект, если он никому уже не нужен. \en Decrease a counter of uses and delete an object if it is not used any more.
refcount_t Release() const override;
/// \ru Операторы чтения, записи. \en Reading and writing operators.
DECLARE_PERSISTENT_CLASS_NEW_DEL( MbTreeStringVariable )
};
IMPL_PERSISTENT_OPS( MbTreeStringVariable )
#endif // __MBVARIABLE_H