SIDimensionality

Interface for representing and manipulating SI physical dimensionalities.

The SIDimensionality API provides an immutable interface for physical dimensionalities, supporting all seven SI base dimensions: length, mass, time, electric current, temperature, amount of substance, and luminous intensity. Dimensionalities may be combined, reduced, raised to powers, parsed from strings, and tested for equality or compatibility.

Defines

kSIQuantityDimensionless
kSIQuantityLength
kSIQuantityInverseLength
kSIQuantityWavenumber
kSIQuantityLengthRatio
kSIQuantityPlaneAngle
kSIQuantityMass
kSIQuantityInverseMass
kSIQuantityMassRatio
kSIQuantityTime
kSIQuantityInverseTime
kSIQuantityFrequency
kSIQuantityRadioactivity
kSIQuantityTimeRatio
kSIQuantityFrequencyRatio
kSIQuantityInverseTimeSquared
kSIQuantityCurrent
kSIQuantityInverseCurrent
kSIQuantityCurrentRatio
kSIQuantityTemperature
kSIQuantityInverseTemperature
kSIQuantityTemperatureRatio
kSIQuantityTemperatureGradient
kSIQuantityAmount
kSIQuantityInverseAmount
kSIQuantityAmountRatio
kSIQuantityLuminousIntensity
kSIQuantityInverseLuminousIntensity
kSIQuantityLuminousIntensityRatio
kSIQuantityArea
kSIQuantityInverseArea
kSIQuantityAreaRatio
kSIQuantitySolidAngle
kSIQuantityVolume
kSIQuantityInverseVolume
kSIQuantityVolumeRatio
kSIQuantitySpeed
kSIQuantityVelocity
kSIQuantityLinearMomentum
kSIQuantityAngularMomentum
kSIQuantityMomentOfInertia
kSIQuantityAcceleration
kSIQuantityMassFlowRate
kSIQuantityMassFlux
kSIQuantityDensity
kSIQuantitySpecificGravity
kSIQuantitySpecificSurfaceArea
kSIQuantitySurfaceAreaToVolumeRatio
kSIQuantitySurfaceDensity
kSIQuantitySpecificVolume
kSIQuantityCurrentDensity
kSIQuantityMagneticFieldStrength
kSIQuantityLuminance
kSIQuantityRefractiveIndex
kSIQuantityFluidity
kSIQuantityMomentOfForce
kSIQuantitySurfaceTension
kSIQuantitySurfaceEnergy
kSIQuantityAngularSpeed
kSIQuantityAngularVelocity
kSIQuantityAngularAcceleration
kSIQuantityHeatFluxDensity
kSIQuantityIrradiance
kSIQuantitySpectralRadiantFluxDensity
kSIQuantityHeatCapacity
kSIQuantityEntropy
kSIQuantitySpecificHeatCapacity
kSIQuantitySpecificEntropy
kSIQuantitySpecificEnergy
kSIQuantityThermalConductance
kSIQuantityThermalConductivity
kSIQuantityEnergyDensity
kSIQuantityElectricFieldStrength
kSIQuantityElectricFieldGradient
kSIQuantityElectricChargeDensity
kSIQuantitySurfaceChargeDensity
kSIQuantityElectricFlux
kSIQuantityElectricFluxDensity
kSIQuantityElectricDisplacement
kSIQuantityPermittivity
kSIQuantityPermeability
kSIQuantityMolarEnergy
kSIQuantityMolarEntropy
kSIQuantityMolarHeatCapacity
kSIQuantityMolarMass
kSIQuantityMolality
kSIQuantityDiffusionFlux
kSIQuantityMassToChargeRatio
kSIQuantityChargeToMassRatio
kSIQuantityRadiationExposure
kSIQuantityAbsorbedDoseRate
kSIQuantityRadiantIntensity
kSIQuantitySpectralRadiantIntensity
kSIQuantityRadiance
kSIQuantitySpectralRadiance
kSIQuantityPorosity
kSIQuantityAngularFrequency
kSIQuantityForce
kSIQuantityTorque
kSIQuantityPressure
kSIQuantityStress
kSIQuantityElasticModulus
kSIQuantityCompressibility
kSIQuantityStressOpticCoefficient
kSIQuantityPressureGradient
kSIQuantityEnergy
kSIQuantitySpectralRadiantEnergy
kSIQuantityPower
kSIQuantitySpectralPower
kSIQuantityVolumePowerDensity
kSIQuantitySpecificPower
kSIQuantityRadiantFlux
kSIQuantityElectricCharge
kSIQuantityAmountOfElectricity
kSIQuantityElectricPotentialDifference
kSIQuantityElectromotiveForce
kSIQuantityElectricPolarizability
kSIQuantityElectricDipoleMoment
kSIQuantityVoltage
kSIQuantityCapacitance
kSIQuantityElectricResistance
kSIQuantityElectricResistancePerLength
kSIQuantityElectricResistivity
kSIQuantityElectricConductance
kSIQuantityElectricConductivity
kSIQuantityElectricalMobility
kSIQuantityMolarConductivity
kSIQuantityMagneticDipoleMoment
kSIQuantityMagneticDipoleMomentRatio
kSIQuantityMagneticFlux
kSIQuantityMagneticFluxDensity
kSIQuantityMolarMagneticSusceptibility
kSIQuantityInverseMagneticFluxDensity
kSIQuantityMagneticFieldGradient
kSIQuantityInductance
kSIQuantityLuminousFlux
kSIQuantityLuminousFluxDensity
kSIQuantityLuminousEnergy
kSIQuantityIlluminance
kSIQuantityAbsorbedDose
kSIQuantityDoseEquivalent
kSIQuantityCatalyticActivity
kSIQuantityCatalyticActivityConcentration
kSIQuantityCatalyticActivityContent
kSIQuantityAction
kSIQuantityReducedAction
kSIQuantityKinematicViscosity
kSIQuantityDiffusionCoefficient
kSIQuantityCirculation
kSIQuantityDynamicViscosity
kSIQuantityAmountConcentration
kSIQuantityMassConcentration
kSIQuantityChargePerAmount
kSIQuantityGravitationalConstant
kSIQuantityLengthPerVolume
kSIQuantityVolumePerLength
kSIQuantityVolumetricFlowRate
kSIQuantityFrequencyPerMagneticFluxDensity
kSIQuantityPowerPerLuminousFlux
kSIQuantityLuminousEfficacy
kSIQuantityRockPermeability
kSIQuantityGyromagneticRatio
kSIQuantityHeatTransferCoefficient
kSIQuantityGasPermeance
kSIQuantityPowerPerAreaPerTemperatureToFourthPower
kSIQuantityFirstHyperPolarizability
kSIQuantitySecondHyperPolarizability
kSIQuantityElectricQuadrupoleMoment
kSIQuantityMagnetizability
kSIQuantitySecondRadiationConstant
kSIQuantityWavelengthDisplacementConstant
kSIQuantityFineStructureConstant
kSIQuantityRatePerAmountConcentrationPerTime

Functions

SIDimensionalityRef SIDimensionalityFromExpression(OCStringRef expression, OCStringRef *error)

Parse an SI dimensionality expression into a cached, immutable object.

OCTypeID SIDimensionalityGetTypeID(void)

Returns the unique type identifier for SIDimensionality objects.

OCStringRef SIDimensionalityCopySymbol(SIDimensionalityRef theDim)

Gets the canonical symbol representation of a dimensionality.

uint8_t SIDimensionalityGetNumExpAtIndex(SIDimensionalityRef theDim, SIBaseDimensionIndex index)

Gets the numerator of the rational exponent for a base dimension.

uint8_t SIDimensionalityGetDenExpAtIndex(SIDimensionalityRef theDim, SIBaseDimensionIndex index)

Gets the denominator of the rational exponent for a base dimension.

int8_t SIDimensionalityReducedExponentAtIndex(SIDimensionalityRef theDim, SIBaseDimensionIndex index)

Gets the reduced exponent (num - den) for a base dimension.

cJSON *SIDimensionalityCopyAsJSON(SIDimensionalityRef dim, bool typed, OCStringRef *outError)

Create a JSON representation of an SIDimensionality.

Creates either a typed or untyped JSON representation based on the typed parameter.

  • Typed: {“type”: “SIDimensionality”, “value”: “m/s^2”}

  • Untyped: “m/s^2”

Parameters:
  • dim – An SIDimensionalityRef instance.

  • typed – If true, creates a typed JSON object. If false, creates a plain string.

  • outError – Optional pointer to receive error information if serialization fails.

Returns:

A cJSON object or string, or cJSON null on failure.

SIDimensionalityRef SIDimensionalityFromJSON(cJSON *json, OCStringRef *outError)

Create an SIDimensionality object from a JSON representation.

Accepts both typed and untyped JSON formats:

  • Typed: {“type”: “SIDimensionality”, “value”: “m/s^2”}

  • Untyped: “m/s^2”

Parameters:
  • json – A cJSON object or string representing the dimensionality.

Returns:

An SIDimensionalityRef or NULL on failure.

bool SIDimensionalityEqual(SIDimensionalityRef theDim1, SIDimensionalityRef theDim2)

Returns true if two dimensionalities are strictly equal.

bool SIDimensionalityIsDimensionless(SIDimensionalityRef theDim)

Returns true if dimensionality is physically dimensionless.

bool SIDimensionalityIsDerived(SIDimensionalityRef theDim)

Returns true if dimensionality is derived.

bool SIDimensionalityIsDimensionlessAndNotDerived(SIDimensionalityRef theDim)

Returns true if dimensionless and not derived by cancellation.

bool SIDimensionalityIsDimensionlessAndDerived(SIDimensionalityRef theDim)

Returns true if dimensionless by cancellation of base symbols.

bool SIDimensionalityIsBaseDimensionality(SIDimensionalityRef theDim)

Returns true if dimensionality matches exactly one SI base dimension.

bool SIDimensionalityHasSameReducedDimensionality(SIDimensionalityRef theDim1, SIDimensionalityRef theDim2)

Returns true if two dimensionalities have the same reduced exponents.

bool SIDimensionalityHasReducedExponents(SIDimensionalityRef theDim, int8_t length_exponent, int8_t mass_exponent, int8_t time_exponent, int8_t current_exponent, int8_t temperature_exponent, int8_t amount_exponent, int8_t luminous_intensity_exponent)

Returns true if dimensionality has the specified reduced exponents.

bool SIDimensionalityCanBeReduced(SIDimensionalityRef theDim)

Returns true if dimensionality can be reduced by canceling common factors.

SIDimensionalityRef SIDimensionalityDimensionless(void)

Returns the canonical dimensionless dimensionality.

SIDimensionalityRef SIDimensionalityForBaseDimensionIndex(SIBaseDimensionIndex index)

Returns the dimensionality for a given base dimension index.

SIDimensionalityRef SIDimensionalityWithBaseDimensionSymbol(OCStringRef symbol, OCStringRef *error)

Returns the dimensionality for a single-character base symbol.

SIDimensionalityRef SIDimensionalityForQuantity(OCStringRef quantity, OCStringRef *error)

Maps a quantity name to its dimensionality.

SIDimensionalityRef SIDimensionalityByReducing(SIDimensionalityRef theDimensionality)

Returns a dimensionality with all exponents reduced to lowest terms.

SIDimensionalityRef SIDimensionalityByTakingNthRoot(SIDimensionalityRef theDim, uint8_t root, OCStringRef *error)

Returns the nth-root of a dimensionality, or NULL and error if invalid.

SIDimensionalityRef SIDimensionalityByMultiplying(SIDimensionalityRef theDim1, SIDimensionalityRef theDim2)

Multiplies two dimensionalities and reduces to lowest terms.

SIDimensionalityRef SIDimensionalityByMultiplyingWithoutReducing(SIDimensionalityRef theDim1, SIDimensionalityRef theDim2)

Multiplies two dimensionalities without reducing exponents.

SIDimensionalityRef SIDimensionalityByDividing(SIDimensionalityRef theDim1, SIDimensionalityRef theDim2)

Divides one dimensionality by another, reduces result.

SIDimensionalityRef SIDimensionalityByDividingWithoutReducing(SIDimensionalityRef theDim1, SIDimensionalityRef theDim2)

Divides one dimensionality by another, does not reduce exponents.

SIDimensionalityRef SIDimensionalityByRaisingToPower(SIDimensionalityRef theDim, int power)

Create a new dimensionality by raising to a power and reducing exponents to lowest terms.

SIDimensionalityRef SIDimensionalityByRaisingToPowerWithoutReducing(SIDimensionalityRef theDim, int power)

Create a new dimensionality by raising to a power without reducing exponents.

OCArrayRef SIDimensionalityCreateArrayOfQuantities(SIDimensionalityRef theDim)

Returns all quantity names matching this dimensionality exactly.

OCArrayRef SIDimensionalityCreateArrayOfQuantitiesWithSameReducedDimensionality(SIDimensionalityRef theDim)

Returns all quantity names with the same reduced dimensionality.

OCArrayRef SIDimensionalityCreateArrayWithSameReducedDimensionality(SIDimensionalityRef theDim)

Returns all built-in dimensionalities with the same reduced dimensionality.

OCArrayRef SIDimensionalityCreateArrayOfQuantityNames(SIDimensionalityRef dim)

Returns an array of quantity names mapped to the given dimensionality.

OCArrayRef SIDimensionalityCreateArrayOfQuantityNamesWithSameReducedDimensionality(SIDimensionalityRef dim)

Returns all quantity names associated with dimensionalities that reduce to the same form as the input.

OCArrayRef SIDimensionalityCreateArrayOfAllQuantityNames(void)

Returns an array of all available quantity names in the library.

void SIDimensionalityShow(SIDimensionalityRef theDim)

Prints a concise representation of the dimensionality to stdout.

void SIDimensionalityShowFull(SIDimensionalityRef theDim)

Prints a detailed, annotated report of the dimensionality to stdout.