arithmetic/src/basictypes/physicalunit/physicalvalue.tmpl


%
%  Quake functions to instantiate operations on generic physical entities.
%

readonly proc PhysicalValue (nm, rfield) is
  local basic  = nm & "PhysicalValue"
  build_generic_intf (basic, "PhysicalValue", [rfield], VISIBLE)
  build_generic_impl (basic, "PhysicalValue", [rfield])
end

readonly proc UnitDatabase (nm, field, rimpl) is
  local udb    = nm & "UnitDatabase"
  local uu     = nm & "UsualUnit"
  local uulist = uu & "List"
  list(uu, uu)
  local cu     = nm & "CompositeUnit"
  local culist = cu & "List"
  list(cu, cu)
  local rfield = field & rimpl
  build_generic_intf (uu,  "UsualUnit",     [rfield], VISIBLE)
  build_generic_impl (uu,  "UsualUnit",     [])
  build_generic_intf (cu,  "CompositeUnit", [uulist], VISIBLE)
  build_generic_impl (cu,  "CompositeUnit", [])
  build_generic_intf (udb, "UnitDatabase",  [rfield, uu, uulist,     culist], VISIBLE)
  build_generic_impl (udb, "UnitDatabase",  [        uu, uulist, cu, culist])
end

readonly proc SIUnit (nm, field, rimpl) is
  local siunit  = nm & "SIUnit"
  local rfield  = field & rimpl
  local rtrans  = field & "Trans"
  local ruu     = field & "UsualUnit"
  local ruulist = ruu & "List"
  local rudb    = field & "UnitDatabase"
  build_generic_intf (siunit, "SIUnit", [rudb], VISIBLE)
  build_generic_impl (siunit, "SIUnit", [rtrans, ruu, ruulist, rudb])
end

readonly proc PhysicalValueFmtLex (nm, field, rimpl, cimpl) is
  local fmt     = nm & "PhysicalValueFmtLex"
  local rfield  = field & rimpl
  local rtrans  = field & "Trans"
  local cfield  = nm & cimpl
  local ctrans  = nm & "Trans"
  local cfmt    = nm & "FmtLex"
  local cpv     = nm & "PhysicalValue"
  local rcu     = field & "CompositeUnit"
  local rculist = rcu & "List"
  local rudb    = field & "UnitDatabase"
  local siunit  = field & "SIUnit"
  build_generic_intf (fmt, "PhysicalValueFmtLex", [cfmt, cpv, rudb], VISIBLE)
  build_generic_impl (fmt, "PhysicalValueFmtLex", [rfield, rtrans, cfield, ctrans, cfmt, rudb])
end