15#ifndef WSFPPROXYNODE_HPP
16#define WSFPPROXYNODE_HPP
18#include "UtCompilerAttributes.hpp"
19#include "UtTextDocument.hpp"
79 std::string GetPathString()
const;
84 std::string GetName()
const;
85 std::string GetAttrName()
const;
86 std::string GetInheritedName()
const;
87 std::string GetTypeName()
const;
88 std::vector<std::string> GetInheritedTypeNames()
const;
99 UtTextDocumentRange GetSourceDocumentRange()
const;
102 UtTextDocumentRange GetFirstDocumentRange() const noexcept;
106 UtTextDocumentRange GetLastDocumentRange() const noexcept;
107 std::
string GetSourceText() const;
128 bool IsOfBasicType() const noexcept;
136 bool IsA_BasicType() const noexcept;
139 bool IsA_StructType() const noexcept;
142 bool IsA_ListType() const noexcept;
145 bool IsA_MapType() const noexcept;
150 bool IsOfBasicType(const
std::
string& aTypeName) const noexcept;
154 bool IsA_PredefinedStructTypeOf(const
std::
string& aTypeName) const noexcept;
158 bool IsOfUserType(const
std::
string& aTypeName) const noexcept;
162 bool IsA_StructTypeOf(const
std::
string& aTypeName) const noexcept;
166 bool IsA_ListTypeOf(const
std::
string& aTypeName) const noexcept;
170 bool IsA_MapTypeOf(const
std::
string& aTypeName) const noexcept;
174 bool IsOfType(const
std::
string& aTypeName) const noexcept;
178 bool IsInherited() const;
179 bool IsInheritedFromParent() const;
194 bool SwitchToBasicTypes();
198 bool SwitchToUserTypes();
203 void ResetToInheritedValue();
236 if (
mPath.size() > aPathLength)
238 mPath.Trim(aPathLength);
248 void NotifyValueChanged()
const;
250 void NotifyValueAdded()
const;
251 void NotifyValueRemoved()
const;
252 void NotifyValueMoved(
const std::string& aOldName)
const;
253 void NotifyAttributeChanged(
const char* aAttributeName)
const;
255 void NotifyBeforeValueChanged()
const;
256 void NotifyBeforeAttributeChanged(
const char* aAttributeName)
const;
261 ChangeAttributeP(aAttributeName,
GetValue().GetAttr(aAttributeName), (
void*)&aValue, T::cPROXY_TYPE_ID);
264 bool Assign(
const std::string& aValue)
const;
265 bool Assign(
int aIntValue)
const;
266 bool Assign(
double aDoubleVal)
const;
267 bool Assign(
bool aBoolVal)
const;
268 bool ClearUnset()
const;
270 bool UnsetAttribute(
const std::string& aAttrName)
const;
272 bool AssignAttribute(
const std::string& aAttrName,
const std::string& aValue)
const;
273 bool AssignAttribute(
const std::string& aAttrName,
int aIntValue)
const;
274 bool AssignAttribute(
const std::string& aAttrName,
double aDoubleVal)
const;
275 bool AssignAttribute(
const std::string& aAttrName,
bool aBoolVal)
const;
280 bool AssignAttribute(
const std::string& aAttrName,
const WsfProxy::String& aValue)
const;
281 bool AssignAttribute(
const std::string& aAttrName,
const WsfProxy::Double& aValue)
const;
282 bool AssignAttribute(
const std::string& aAttrName,
const WsfProxy::Int& aValue)
const;
283 bool AssignAttribute(
const std::string& aAttrName,
const WsfProxy::Latitude& aValue)
const;
284 bool AssignAttribute(
const std::string& aAttrName,
const WsfProxy::Longitude& aValue)
const;
285 bool AssignAttribute(
const std::string& aAttrName,
const WsfProxy::Length& aValue)
const;
286 bool AssignAttribute(
const std::string& aAttrName,
const WsfProxy::Length2& aValue)
const;
287 bool AssignAttribute(
const std::string& aAttrName,
const WsfProxy::Time& aValue)
const;
288 bool AssignAttribute(
const std::string& aAttrName,
const WsfProxy::Speed& aValue)
const;
289 bool AssignAttribute(
const std::string& aAttrName,
const WsfProxy::DataSize& aValue)
const;
290 bool AssignAttribute(
const std::string& aAttrName,
const WsfProxy::Power& aValue)
const;
291 bool AssignAttribute(
const std::string& aAttrName,
const WsfProxy::PowerDB& aValue)
const;
293 bool AssignAttribute(
const std::string& aAttrName,
const WsfProxy::Mass& aValue)
const;
294 bool AssignAttribute(
const std::string& aAttrName,
const WsfProxy::Force& aValue)
const;
295 bool AssignAttribute(
const std::string& aAttrName,
const WsfProxy::Torque& aValue)
const;
296 bool AssignAttribute(
const std::string& aAttrName,
const WsfProxy::Area& aValue)
const;
297 bool AssignAttribute(
const std::string& aAttrName,
const WsfProxy::AreaDB& aValue)
const;
298 bool AssignAttribute(
const std::string& aAttrName,
const WsfProxy::Volume& aValue)
const;
299 bool AssignAttribute(
const std::string& aAttrName,
const WsfProxy::Time2& aValue)
const;
301 bool AssignAttribute(
const std::string& aAttrName,
const WsfProxy::Frequency& aValue)
const;
302 bool AssignAttribute(
const std::string& aAttrName,
const WsfProxy::Angle& aValue)
const;
305 bool AssignAttribute(
const std::string& aAttrName,
const WsfProxy::DataRate& aValue)
const;
308 bool AssignAttribute(
const std::string& aAttrName,
const WsfProxy::Energy& aValue)
const;
309 bool AssignAttribute(
const std::string& aAttrName,
const WsfProxy::Fluence& aValue)
const;
311 bool AssignAttribute(
const std::string& aAttrName,
const WsfProxy::Ratio& aValue)
const;
313 bool AssignAttribute(
const std::string& aAttrName,
const WsfProxy::Pressure& aValue)
const;
317 bool AssignAttribute(
const std::string& aAttrName,
const WsfProxy::Position& aValue)
const;
363 std::string ToJSON(
int aOutputFlags = 0)
const;
369 T* attrPtr =
GetValue().GetAttr(aName);
380 bool AssignAttributeT(
const std::string& aAttrName,
const T& aValue)
const
384 bool modified =
false;
390 if (!(thisValue == aValue))
403 bool AssignT(
const T& aValue)
const
405 bool modified =
false;
406 WsfPProxyValue val = GetValue();
407 const WsfPProxyType* typePtr = val.
GetType();
411 if (!(thisValue == aValue))
413 NotifyBeforeValueChanged();
415 NotifyValueChanged();
422 template<
typename NUMBER_TYPE>
423 bool AssignNumericP(NUMBER_TYPE aValue)
const
425 WsfPProxyValue value = GetValue();
426 const WsfPProxyType* typePtr = value.
GetType();
427 bool modified =
false;
435 if (val.
GetValue() !=
static_cast<int>(aValue))
437 NotifyBeforeValueChanged();
438 val.
SetValue(
static_cast<int>(aValue));
439 NotifyValueChanged();
447 if (val.
GetValue() !=
static_cast<double>(aValue))
449 NotifyBeforeValueChanged();
450 val.
SetValue(
static_cast<double>(aValue));
451 NotifyValueChanged();
461 void ChangeAttributeP(
const char* aAttrName,
const WsfPProxyValue& aAttribute,
void* aNewValuePtr,
int aNewValueType)
const;
464 mutable bool mIsCurrent;
466 mutable bool mIsOfBasicType;
470 mutable short mProxySequenceNumber;
std::vector< UtStringRef > WsfParseTypePath
Definition WsfParseTypePath.hpp:21
Definition WsfPProxyIndex.hpp:38
Definition WsfPProxyKey.hpp:24
Definition WsfPProxyNode.hpp:60
void MoveTo(WsfPProxy *aProxy, const WsfPProxyPath &aPath, size_t aSubPathLength)
Definition WsfPProxyNode.cpp:1253
bool IsNull() const
Definition WsfPProxyNode.hpp:209
bool operator==(const WsfPProxyNode &aRhs) const
Definition WsfPProxyNode.hpp:211
WsfPProxyValue GetValue() const
Definition WsfPProxyNode.cpp:79
WsfPProxy * GetProxy() const
Definition WsfPProxyNode.hpp:73
bool IsValid() const
Definition WsfPProxyNode.hpp:208
void ChangeAttribute(const char *aAttributeName, const T &aValue)
Definition WsfPProxyNode.hpp:259
bool operator!=(const WsfPProxyNode &aRhs) const
Definition WsfPProxyNode.hpp:212
WsfPProxyNode & ToParent()
Definition WsfPProxyNode.hpp:228
void NotifyBeforeValueChanged() const
Definition WsfPProxyNode.cpp:768
static WsfPProxyNode FromProxy(WsfPProxy *aProxy)
Definition WsfPProxyNode.cpp:69
WsfPProxyNode Root() const
Definition WsfPProxyNode.cpp:738
WsfPProxyNode()
Definition WsfPProxyNode.cpp:24
WsfPProxyNode operator+(const WsfPProxyPath &aSuffixPath) const
Definition WsfPProxyNode.hpp:221
T GetAttributeT(const std::string &aName) const
Definition WsfPProxyNode.hpp:367
WsfPProxyPath mPath
Definition WsfPProxyNode.hpp:473
void NotifyValueChanged() const
Definition WsfPProxyNode.cpp:762
WsfPProxyNode & TrimPath(size_t aPathLength)
Definition WsfPProxyNode.hpp:234
Represents a path or unique key to a value in the proxy.
Definition WsfPProxyPath.hpp:64
Definition WsfPProxyType.hpp:37
int mTypeStoredKind
Definition WsfPProxyType.hpp:57
Definition WsfPProxyValue.hpp:33
const WsfPProxyType * GetType() const
Definition WsfPProxyValue.hpp:61
WsfPProxyValue GetAttr(const WsfPProxyKey &aEntry) const
Definition WsfPProxyValue.hpp:62
void * GetDataPtr() const
Definition WsfPProxyValue.hpp:60
Definition WsfPProxy.hpp:32
T & GetValue()
Definition WsfPProxyBasicValues.hpp:347
void SetValue(const T &aValue)
Definition WsfPProxyBasicValues.hpp:349
Definition WsfPProxyBasicValues.hpp:167
Definition WsfPProxyBasicValues.hpp:89
Definition WsfPProxyBasicValues.hpp:478
NumericUnitaryValueT< UtTimeValue, WsfProxy::cTIME_VALUE > Time
Definition WsfPProxyBasicValues.hpp:415
NumericUnitaryValueT< UtTime2Value, WsfProxy::cTIME2_VALUE > Time2
Definition WsfPProxyBasicValues.hpp:439
NumericUnitaryValueT< UtTorqueValue, WsfProxy::cTORQUE_VALUE > Torque
Definition WsfPProxyBasicValues.hpp:431
NumericUnitaryValueT< UtRatioValue, WsfProxy::cRATIO_VALUE > Ratio
Definition WsfPProxyBasicValues.hpp:463
NumericValueT< UtLonPos, WsfProxy::cLONGITUDE_VALUE > Longitude
Definition WsfPProxyBasicValues.hpp:411
NumericUnitaryValueT< UtLengthValue, WsfProxy::cLENGTH_VALUE > Length
Definition WsfPProxyBasicValues.hpp:413
NumericUnitaryValueT< UtAngularInertiaValue, WsfProxy::cANGULARINERTIA_VALUE > AngularInertia
Definition WsfPProxyBasicValues.hpp:473
NumericUnitaryValueT< UtDataRateValue, WsfProxy::cDATARATE_VALUE > DataRate
Definition WsfPProxyBasicValues.hpp:451
NumericUnitaryValueT< UtAreaDBValue, WsfProxy::cAREADB_VALUE > AreaDB
Definition WsfPProxyBasicValues.hpp:435
NumericUnitaryValueT< UtSpecificRangeValue, WsfProxy::cSPECIFICRANGE_VALUE > SpecificRange
Definition WsfPProxyBasicValues.hpp:471
NumericUnitaryValueT< UtFrequencyValue, WsfProxy::cFREQUENCY_VALUE > Frequency
Definition WsfPProxyBasicValues.hpp:443
NumericUnitaryValueT< UtAreaValue, WsfProxy::cAREA_VALUE > Area
Definition WsfPProxyBasicValues.hpp:433
NumericUnitaryValueT< UtVolumeValue, WsfProxy::cVOLUME_VALUE > Volume
Definition WsfPProxyBasicValues.hpp:437
NumericUnitaryValueT< UtFluenceValue, WsfProxy::cFLUENCE_VALUE > Fluence
Definition WsfPProxyBasicValues.hpp:459
NumericUnitaryValueT< UtSpeedValue, WsfProxy::cSPEED_VALUE > Speed
Definition WsfPProxyBasicValues.hpp:417
@ cDOUBLE_VALUE
Definition WsfPProxyCommon.hpp:48
@ cINT_VALUE
Definition WsfPProxyCommon.hpp:46
NumericValueT< UtLatPos, WsfProxy::cLATITUDE_VALUE > Latitude
Definition WsfPProxyBasicValues.hpp:409
NumericUnitaryValueT< UtPowerDBValue, WsfProxy::cPOWERDB_VALUE > PowerDB
Definition WsfPProxyBasicValues.hpp:423
NumericValueT< int, WsfProxy::cINT_VALUE > Int
Definition WsfPProxyBasicValues.hpp:407
NumericUnitaryValueT< UtAngularAccelerationValue, WsfProxy::cANGULARACCELERATION_VALUE > AngularAcceleration
Definition WsfPProxyBasicValues.hpp:449
NumericUnitaryValueT< UtIrradianceValue, WsfProxy::cIRRADIANCE_VALUE > Irradiance
Definition WsfPProxyBasicValues.hpp:461
NumericUnitaryValueT< UtPowerValue, WsfProxy::cPOWER_VALUE > Power
Definition WsfPProxyBasicValues.hpp:421
NumericUnitaryValueT< UtDataSizeValue, WsfProxy::cDATASIZE_VALUE > DataSize
Definition WsfPProxyBasicValues.hpp:419
NumericUnitaryValueT< UtMassTransferValue, WsfProxy::cMASSTRANSFER_VALUE > MassTransfer
Definition WsfPProxyBasicValues.hpp:455
NumericUnitaryValueT< UtMassDensityValue, WsfProxy::cMASSDENSITY_VALUE > MassDensity
Definition WsfPProxyBasicValues.hpp:453
NumericUnitaryValueT< UtSolidAngleValue, WsfProxy::cSOLIDANGLE_VALUE > SolidAngle
Definition WsfPProxyBasicValues.hpp:425
NumericUnitaryValueT< UtAngleValue, WsfProxy::cANGLE_VALUE > Angle
Definition WsfPProxyBasicValues.hpp:445
NumericUnitaryValueT< UtForceValue, WsfProxy::cFORCE_VALUE > Force
Definition WsfPProxyBasicValues.hpp:429
NumericUnitaryValueT< UtAccelerationValue, WsfProxy::cACCELERATION_VALUE > Acceleration
Definition WsfPProxyBasicValues.hpp:441
NumericUnitaryValueT< UtEnergyValue, WsfProxy::cENERGY_VALUE > Energy
Definition WsfPProxyBasicValues.hpp:457
NumericUnitaryValueT< UtAngularRateValue, WsfProxy::cANGULARRATE_VALUE > AngularRate
Definition WsfPProxyBasicValues.hpp:447
NumericUnitaryValueT< UtTemperatureValue, WsfProxy::cTEMPERATURE_VALUE > Temperature
Definition WsfPProxyBasicValues.hpp:469
NumericUnitaryValueT< UtMassValue, WsfProxy::cMASS_VALUE > Mass
Definition WsfPProxyBasicValues.hpp:427
NumericUnitaryValueT< UtNoisePressureValue, WsfProxy::cNOISEPRESSURE_VALUE > NoisePressure
Definition WsfPProxyBasicValues.hpp:465
NumericUnitaryValueT< UtPressureValue, WsfProxy::cPRESSURE_VALUE > Pressure
Definition WsfPProxyBasicValues.hpp:467
NumericValueT< double, WsfProxy::cDOUBLE_VALUE > Double
Definition WsfPProxyBasicValues.hpp:405
Template specialization for wsf::comm::Address. Allows usage of Address in std::unordered_map/set.
Definition WsfCommAddress.hpp:185