348 lines
12 KiB
C
348 lines
12 KiB
C
|
|
#pragma once
|
|||
|
|
|
|||
|
|
#include <cstdint>
|
|||
|
|
#include <cstddef>
|
|||
|
|
#include <string>
|
|||
|
|
#include <unordered_map>
|
|||
|
|
#include <vector>
|
|||
|
|
#include <cstring>
|
|||
|
|
|
|||
|
|
#include "pqdif/include/pqdif_ph.h"
|
|||
|
|
#include "pqdif/include/pqdif_id.h"
|
|||
|
|
|
|||
|
|
namespace pqdif_sem
|
|||
|
|
{
|
|||
|
|
|
|||
|
|
// ============================================================================
|
|||
|
|
// ˵<><CBB5>
|
|||
|
|
// ----------------------------------------------------------------------------
|
|||
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>ֻ<EFBFBD><D6BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>͡<EFBFBD><CDA1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ײ<EFBFBD><D7B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ﱣ<EFBFBD><EFB1A3>ԭʼ<D4AD>ֶ<EFBFBD>ֵ<EFBFBD><D6B5>UINT4 / GUID<49><44>
|
|||
|
|
// ӳ<><D3B3><EFBFBD><EFBFBD>ͨ<EFBFBD><CDA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>IJ<EFBFBD><C4B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ԭʼֵ<CABC><D6B5><EFBFBD>ͳɡ<CDB3><C9A1><EFBFBD><EFBFBD><D7BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD> + <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
// ============================================================================
|
|||
|
|
|
|||
|
|
// ------------------------------
|
|||
|
|
// GUID <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
// ------------------------------
|
|||
|
|
|
|||
|
|
inline bool GuidEqual(const GUID& a, const GUID& b)
|
|||
|
|
{
|
|||
|
|
return std::memcmp(&a, &b, sizeof(GUID)) == 0;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
struct GuidHash
|
|||
|
|
{
|
|||
|
|
std::size_t operator()(const GUID& g) const noexcept
|
|||
|
|
{
|
|||
|
|
const unsigned char* p = reinterpret_cast<const unsigned char*>(&g);
|
|||
|
|
std::size_t h = 1469598103934665603ull; // FNV-1a <20><><EFBFBD><EFBFBD>
|
|||
|
|
for (std::size_t i = 0; i < sizeof(GUID); ++i)
|
|||
|
|
{
|
|||
|
|
h ^= static_cast<std::size_t>(p[i]);
|
|||
|
|
h *= 1099511628211ull;
|
|||
|
|
}
|
|||
|
|
return h;
|
|||
|
|
}
|
|||
|
|
};
|
|||
|
|
|
|||
|
|
std::string GuidToString(const GUID& g);
|
|||
|
|
|
|||
|
|
// ============================================================================
|
|||
|
|
// һ<><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ID ö<>٣<EFBFBD><D9A3><EFBFBD>Դ<EFBFBD><D4B4>PDF <20><> B.2 / B.3 / B.4<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> pqdif_id.h <20><><EFBFBD>к궨<D0BA>壩
|
|||
|
|
// ============================================================================
|
|||
|
|
|
|||
|
|
// ------------------------------
|
|||
|
|
// 1) <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>tagPhaseID<49><44><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> UINT4
|
|||
|
|
// <20><>Դ<EFBFBD><D4B4>PDF <20><> B.2<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><EFBFBD>pqdif/include/pqdif_id.h
|
|||
|
|
// ------------------------------
|
|||
|
|
enum class PhaseId : uint32_t
|
|||
|
|
{
|
|||
|
|
None = ID_PHASE_NONE,
|
|||
|
|
AN = ID_PHASE_AN,
|
|||
|
|
BN = ID_PHASE_BN,
|
|||
|
|
CN = ID_PHASE_CN,
|
|||
|
|
NG = ID_PHASE_NG,
|
|||
|
|
AB = ID_PHASE_AB,
|
|||
|
|
BC = ID_PHASE_BC,
|
|||
|
|
CA = ID_PHASE_CA,
|
|||
|
|
RES = ID_PHASE_RES,
|
|||
|
|
NET = ID_PHASE_NET,
|
|||
|
|
Total = ID_PHASE_TOTAL,
|
|||
|
|
LnAve = ID_PHASE_LN_AVE,
|
|||
|
|
LlAve = ID_PHASE_LL_AVE,
|
|||
|
|
Worst = ID_PHASE_WORST,
|
|||
|
|
Plus = ID_PHASE_PLUS,
|
|||
|
|
Minus = ID_PHASE_MINUS,
|
|||
|
|
|
|||
|
|
General1 = ID_PHASE_GENERAL_1,
|
|||
|
|
General2 = ID_PHASE_GENERAL_2,
|
|||
|
|
General3 = ID_PHASE_GENERAL_3,
|
|||
|
|
General4 = ID_PHASE_GENERAL_4,
|
|||
|
|
General5 = ID_PHASE_GENERAL_5,
|
|||
|
|
General6 = ID_PHASE_GENERAL_6,
|
|||
|
|
General7 = ID_PHASE_GENERAL_7,
|
|||
|
|
General8 = ID_PHASE_GENERAL_8,
|
|||
|
|
General9 = ID_PHASE_GENERAL_9,
|
|||
|
|
General10 = ID_PHASE_GENERAL_10,
|
|||
|
|
General11 = ID_PHASE_GENERAL_11,
|
|||
|
|
General12 = ID_PHASE_GENERAL_12,
|
|||
|
|
General13 = ID_PHASE_GENERAL_13,
|
|||
|
|
General14 = ID_PHASE_GENERAL_14,
|
|||
|
|
General15 = ID_PHASE_GENERAL_15,
|
|||
|
|
General16 = ID_PHASE_GENERAL_16
|
|||
|
|
};
|
|||
|
|
|
|||
|
|
// ------------------------------
|
|||
|
|
// 2) <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>tagQuantityMeasuredID<49><44><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> UINT4
|
|||
|
|
// <20><>Դ<EFBFBD><D4B4>PDF <20><> B.2<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><EFBFBD>pqdif/include/pqdif_id.h
|
|||
|
|
// ע<>⣺<EFBFBD><E2A3BA><EFBFBD><EFBFBD>û<EFBFBD><C3BB> Frequency<63><79>Ƶ<EFBFBD><C6B5><EFBFBD><EFBFBD> characteristic <20><><EFBFBD>
|
|||
|
|
// ------------------------------
|
|||
|
|
enum class QuantityMeasuredId : uint32_t
|
|||
|
|
{
|
|||
|
|
None = ID_QM_NONE,
|
|||
|
|
Voltage = ID_QM_VOLTAGE,
|
|||
|
|
Current = ID_QM_CURRENT,
|
|||
|
|
Power = ID_QM_POWER,
|
|||
|
|
Energy = ID_QM_ENERGY,
|
|||
|
|
Temperature = ID_QM_TEMPERATURE,
|
|||
|
|
Pressure = ID_QM_PRESSURE,
|
|||
|
|
Charge = ID_QM_CHARGE,
|
|||
|
|
EField = ID_QM_EFIELD,
|
|||
|
|
MField = ID_QM_MFIELD,
|
|||
|
|
Velocity = ID_QM_VELOCITY,
|
|||
|
|
Bearing = ID_QM_BEARING,
|
|||
|
|
Force = ID_QM_FORCE,
|
|||
|
|
Torque = ID_QM_TORQUE,
|
|||
|
|
Position = ID_QM_POSITION,
|
|||
|
|
FluxLinkage = ID_QM_FLUXLINKAGE,
|
|||
|
|
FluxDensity = ID_QM_FLUXDENSITY,
|
|||
|
|
Status = ID_QM_STATUS
|
|||
|
|
};
|
|||
|
|
|
|||
|
|
// ------------------------------
|
|||
|
|
// 3) <20><>λ<EFBFBD><CEBB>tagQuantityUnitsID<49><44><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> UINT4
|
|||
|
|
// <20><>Դ<EFBFBD><D4B4>PDF <20><> B.2<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><EFBFBD>pqdif/include/pqdif_id.h
|
|||
|
|
// ------------------------------
|
|||
|
|
enum class QuantityUnitsId : uint32_t
|
|||
|
|
{
|
|||
|
|
None = ID_QU_NONE,
|
|||
|
|
Timestamp = ID_QU_TIMESTAMP,
|
|||
|
|
Seconds = ID_QU_SECONDS,
|
|||
|
|
Cycles = ID_QU_CYCLES,
|
|||
|
|
Volts = ID_QU_VOLTS,
|
|||
|
|
Amps = ID_QU_AMPS,
|
|||
|
|
VA = ID_QU_VA,
|
|||
|
|
Watts = ID_QU_WATTS,
|
|||
|
|
Vars = ID_QU_VARS,
|
|||
|
|
Ohms = ID_QU_OHMS,
|
|||
|
|
Siemens = ID_QU_SIEMENS,
|
|||
|
|
VoltsPerAmp = ID_QU_VOLTSPERAMP,
|
|||
|
|
Joules = ID_QU_JOULES,
|
|||
|
|
Hertz = ID_QU_HERTZ,
|
|||
|
|
Celcius = ID_QU_CELCIUS,
|
|||
|
|
Degrees = ID_QU_DEGREES,
|
|||
|
|
Db = ID_QU_DB,
|
|||
|
|
Percent = ID_QU_PERCENT,
|
|||
|
|
PerUnit = ID_QU_PERUNIT,
|
|||
|
|
Samples = ID_QU_SAMPLES,
|
|||
|
|
VarHours = ID_QU_VARHOURS,
|
|||
|
|
WattHours = ID_QU_WATTHOURS,
|
|||
|
|
VaHours = ID_QU_VAHOURS,
|
|||
|
|
Mps = ID_QU_MPS,
|
|||
|
|
Mph = ID_QU_MPH,
|
|||
|
|
Bars = ID_QU_BARS,
|
|||
|
|
Pascals = ID_QU_PASCALS,
|
|||
|
|
Newtons = ID_QU_NEWTONS,
|
|||
|
|
NewtonMeters = ID_QU_NEWTONMETERS,
|
|||
|
|
Rpm = ID_QU_RPM,
|
|||
|
|
RadPerSec = ID_QU_RADPERSEC,
|
|||
|
|
Meters = ID_QU_METERS,
|
|||
|
|
WeberTurns = ID_QU_WEBERTURNS,
|
|||
|
|
Teslas = ID_QU_TESLAS,
|
|||
|
|
Webers = ID_QU_WEBERS,
|
|||
|
|
VoltsPerVolt = ID_QU_VOLTSPERVOLT,
|
|||
|
|
AmpsPerAmp = ID_QU_AMPSPERAMP,
|
|||
|
|
AmpsPerVolt = ID_QU_AMPSPERVOLT
|
|||
|
|
};
|
|||
|
|
|
|||
|
|
// ------------------------------
|
|||
|
|
// 4) <20><><EFBFBD>д洢<D0B4><E6B4A2>ʽ<EFBFBD><CABD>tagStorageMethodID<49><44><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> UINT4
|
|||
|
|
// <20><>Դ<EFBFBD><D4B4>PDF <20><> B.2<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><EFBFBD>pqdif/include/pqdif_id.h
|
|||
|
|
// ------------------------------
|
|||
|
|
enum class StorageMethodId : uint32_t
|
|||
|
|
{
|
|||
|
|
Values = ID_SERIES_METHOD_VALUES,
|
|||
|
|
Scaled = ID_SERIES_METHOD_SCALED,
|
|||
|
|
Increment = ID_SERIES_METHOD_INCREMENT
|
|||
|
|
};
|
|||
|
|
|
|||
|
|
// ------------------------------
|
|||
|
|
// 5) <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʽ<EFBFBD><CABD>tagTriggerMethodID<49><44><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> UINT4
|
|||
|
|
// <20><>Դ<EFBFBD><D4B4>PDF <20><> B.3 / B.4<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><EFBFBD>pqdif/include/pqdif_id.h
|
|||
|
|
// ------------------------------
|
|||
|
|
enum class TriggerMethodId : uint32_t
|
|||
|
|
{
|
|||
|
|
None = ID_TRIGGER_METH_NONE,
|
|||
|
|
Channel = ID_TRIGGER_METH_CHANNEL,
|
|||
|
|
Periodic = ID_TRIGGER_METH_PERIODIC,
|
|||
|
|
External = ID_TRIGGER_METH_EXTERNAL,
|
|||
|
|
PeriodicStats = ID_TRIGGER_METH_PERIODIC_STATS
|
|||
|
|
};
|
|||
|
|
|
|||
|
|
// ============================================================================
|
|||
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ
|
|||
|
|
// ============================================================================
|
|||
|
|
|
|||
|
|
struct UIntSemanticEntry
|
|||
|
|
{
|
|||
|
|
uint32_t raw_value; // ԭʼ UINT4 ֵ
|
|||
|
|
const char* standard_name; // <20><><EFBFBD><D7BC>/ͷ<>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ID_PHASE_AN
|
|||
|
|
const char* display_name; // <20><><EFBFBD><EFBFBD>չʾ<D5B9><CABE>
|
|||
|
|
const char* source_tag; // <20><>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD><EFBFBD>ĸ<EFBFBD><C4B8><EFBFBD><EFBFBD>ֶΣ<D6B6><CEA3><EFBFBD><EFBFBD><EFBFBD> tagPhaseID
|
|||
|
|
const char* comment; // <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5>
|
|||
|
|
};
|
|||
|
|
|
|||
|
|
// ============================================================================
|
|||
|
|
// <20><><EFBFBD><EFBFBD>GUID <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
// ----------------------------------------------------------------------------
|
|||
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> GUID ֵ<><D6B5><EFBFBD>ֳ<EFBFBD><D6B3><EFBFBD>ֱ<EFBFBD><D6B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD> pqdif_id.h <20><><EFBFBD><EFBFBD><EFBFBD>г<EFBFBD><D0B3><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
// <20><><EFBFBD><EFBFBD>ÿһ<C3BF><EFBFBD>ܻ<EFBFBD><DCBB>ݵ<EFBFBD><DDB5><EFBFBD><EFBFBD><EFBFBD> pqdif ͷ<>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>塣
|
|||
|
|
// ============================================================================
|
|||
|
|
|
|||
|
|
enum class GuidSemanticField
|
|||
|
|
{
|
|||
|
|
QuantityType, // tagQuantityTypeID
|
|||
|
|
ValueType, // tagValueTypeID
|
|||
|
|
QuantityCharacteristic, // tagQuantityCharacteristicID
|
|||
|
|
DisturbanceCategory // tagDisturbanceCategoryID
|
|||
|
|
};
|
|||
|
|
|
|||
|
|
struct GuidSemanticEntry
|
|||
|
|
{
|
|||
|
|
GUID raw_guid; // ԭʼ GUID ֵ
|
|||
|
|
GuidSemanticField field; // <20><><EFBFBD><EFBFBD><EFBFBD>ֶ<EFBFBD><D6B6><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
const char* standard_name; // <20><><EFBFBD><D7BC>/ͷ<>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ID_QT_VALUELOG
|
|||
|
|
const char* display_name; // <20><><EFBFBD><EFBFBD>չʾ<D5B9><CABE>
|
|||
|
|
const char* source_tag; // <20><>Ӧ<EFBFBD>ı<EFBFBD><EFBFBD>ֶ<EFBFBD><D6B6><EFBFBD>
|
|||
|
|
const char* comment; // <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5>
|
|||
|
|
};
|
|||
|
|
|
|||
|
|
// ============================================================================
|
|||
|
|
// <20>ġ<EFBFBD><C4A1>̶<EFBFBD><CCB6><EFBFBD>̬<EFBFBD><CCAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݹ̶<DDB9><CCB6><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD>̶<EFBFBD><CCB6><EFBFBD>registry ֻ<>Dz<EFBFBD>ѯ<EFBFBD><D1AF><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
// ============================================================================
|
|||
|
|
|
|||
|
|
extern const UIntSemanticEntry kPhaseTable[];
|
|||
|
|
extern const std::size_t kPhaseTableSize;
|
|||
|
|
|
|||
|
|
extern const UIntSemanticEntry kQuantityMeasuredTable[];
|
|||
|
|
extern const std::size_t kQuantityMeasuredTableSize;
|
|||
|
|
|
|||
|
|
extern const UIntSemanticEntry kQuantityUnitsTable[];
|
|||
|
|
extern const std::size_t kQuantityUnitsTableSize;
|
|||
|
|
|
|||
|
|
extern const UIntSemanticEntry kStorageMethodTable[];
|
|||
|
|
extern const std::size_t kStorageMethodTableSize;
|
|||
|
|
|
|||
|
|
extern const UIntSemanticEntry kTriggerMethodTable[];
|
|||
|
|
extern const std::size_t kTriggerMethodTableSize;
|
|||
|
|
|
|||
|
|
extern const GuidSemanticEntry kQuantityTypeTable[];
|
|||
|
|
extern const std::size_t kQuantityTypeTableSize;
|
|||
|
|
|
|||
|
|
extern const GuidSemanticEntry kValueTypeTable[];
|
|||
|
|
extern const std::size_t kValueTypeTableSize;
|
|||
|
|
|
|||
|
|
extern const GuidSemanticEntry kQuantityCharacteristicTable[];
|
|||
|
|
extern const std::size_t kQuantityCharacteristicTableSize;
|
|||
|
|
|
|||
|
|
extern const GuidSemanticEntry kDisturbanceCategoryTable[];
|
|||
|
|
extern const std::size_t kDisturbanceCategoryTableSize;
|
|||
|
|
|
|||
|
|
// ============================================================================
|
|||
|
|
// <20>塢<EFBFBD><E5A1A2>ѯ<EFBFBD><D1AF><EFBFBD><EFBFBD>
|
|||
|
|
// ============================================================================
|
|||
|
|
|
|||
|
|
const UIntSemanticEntry* FindUIntSemantic(
|
|||
|
|
const UIntSemanticEntry* table,
|
|||
|
|
std::size_t table_size,
|
|||
|
|
uint32_t raw_value);
|
|||
|
|
|
|||
|
|
const UIntSemanticEntry* FindPhase(uint32_t raw_value);
|
|||
|
|
const UIntSemanticEntry* FindQuantityMeasured(uint32_t raw_value);
|
|||
|
|
const UIntSemanticEntry* FindQuantityUnits(uint32_t raw_value);
|
|||
|
|
const UIntSemanticEntry* FindStorageMethod(uint32_t raw_value);
|
|||
|
|
const UIntSemanticEntry* FindTriggerMethod(uint32_t raw_value);
|
|||
|
|
|
|||
|
|
std::string FindPhaseName(uint32_t raw_value);
|
|||
|
|
std::string FindQuantityMeasuredName(uint32_t raw_value);
|
|||
|
|
std::string FindQuantityUnitsName(uint32_t raw_value);
|
|||
|
|
std::string FindStorageMethodName(uint32_t raw_value);
|
|||
|
|
std::string FindStorageMethodFlagsName(uint32_t raw_value);
|
|||
|
|
std::string FindTriggerMethodName(uint32_t raw_value);
|
|||
|
|
|
|||
|
|
// ============================================================================
|
|||
|
|
// <20><><EFBFBD><EFBFBD>GUID ע<><D7A2><EFBFBD><EFBFBD>
|
|||
|
|
// ----------------------------------------------------------------------------
|
|||
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD>ݹ̶<DDB9><CCB6><EFBFBD>registry ֻ<>ǰѹ̶<D1B9><CCB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɿ<EFBFBD><C9BF>ٲ<EFBFBD>ѯ<EFBFBD><D1AF><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
// ============================================================================
|
|||
|
|
|
|||
|
|
class GuidSemanticRegistry
|
|||
|
|
{
|
|||
|
|
public:
|
|||
|
|
GuidSemanticRegistry();
|
|||
|
|
|
|||
|
|
const GuidSemanticEntry* Find(GuidSemanticField field, const GUID& raw_guid) const;
|
|||
|
|
std::string FindName(GuidSemanticField field, const GUID& raw_guid, const char* fallback = "UNKNOWN_GUID") const;
|
|||
|
|
|
|||
|
|
private:
|
|||
|
|
struct Key
|
|||
|
|
{
|
|||
|
|
GuidSemanticField field;
|
|||
|
|
GUID guid;
|
|||
|
|
};
|
|||
|
|
|
|||
|
|
struct KeyHash
|
|||
|
|
{
|
|||
|
|
std::size_t operator()(const Key& k) const noexcept
|
|||
|
|
{
|
|||
|
|
std::size_t h1 = std::hash<int>{}(static_cast<int>(k.field));
|
|||
|
|
std::size_t h2 = GuidHash{}(k.guid);
|
|||
|
|
return h1 ^ (h2 << 1);
|
|||
|
|
}
|
|||
|
|
};
|
|||
|
|
|
|||
|
|
struct KeyEq
|
|||
|
|
{
|
|||
|
|
bool operator()(const Key& a, const Key& b) const noexcept
|
|||
|
|
{
|
|||
|
|
return a.field == b.field && GuidEqual(a.guid, b.guid);
|
|||
|
|
}
|
|||
|
|
};
|
|||
|
|
|
|||
|
|
std::unordered_map<Key, const GuidSemanticEntry*, KeyHash, KeyEq> map_;
|
|||
|
|
};
|
|||
|
|
|
|||
|
|
const GuidSemanticRegistry& GetGuidSemanticRegistry();
|
|||
|
|
|
|||
|
|
// ============================================================================
|
|||
|
|
// <20>ߡ<EFBFBD>ͳ<EFBFBD><CDB3>ӳ<EFBFBD>䳣<EFBFBD><E4B3A3> helper
|
|||
|
|
// ----------------------------------------------------------------------------
|
|||
|
|
// <20><><EFBFBD><EFBFBD>ֻ<EFBFBD>š<EFBFBD><C5A1><EFBFBD><EFBFBD><EFBFBD>ȷ<EFBFBD><C8B7>Դ<EFBFBD>Ҷ<EFBFBD>ͳ<EFBFBD><CDB3>ӳ<EFBFBD>䳣<EFBFBD>á<EFBFBD><C3A1><EFBFBD><EFBFBD>жϡ<D0B6>
|
|||
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD>²<EFBFBD><C2B2><EFBFBD> helper<65><72>
|
|||
|
|
// ============================================================================
|
|||
|
|
|
|||
|
|
bool IsQuantityTypeValueLog(const GUID& raw_guid);
|
|||
|
|
bool IsValueTypeTime(const GUID& raw_guid);
|
|||
|
|
bool IsValueTypeVal(const GUID& raw_guid);
|
|||
|
|
bool IsValueTypeMin(const GUID& raw_guid);
|
|||
|
|
bool IsValueTypeMax(const GUID& raw_guid);
|
|||
|
|
bool IsValueTypeAvg(const GUID& raw_guid);
|
|||
|
|
bool IsValueTypeInterval(const GUID& raw_guid);
|
|||
|
|
bool IsCharacteristicFrequency(const GUID& raw_guid);
|
|||
|
|
bool IsCharacteristicRms(const GUID& raw_guid);
|
|||
|
|
bool IsCharacteristicTotalThd(const GUID& raw_guid);
|
|||
|
|
bool IsUnitHertz(uint32_t raw_value);
|
|||
|
|
bool IsTriggerPeriodicStats(uint32_t raw_value);
|
|||
|
|
|
|||
|
|
} // namespace pqdif_sem#pragma once
|