use ifc_schema::SchemaVersion;
pub const TABLE_SCHEMA_VERSION: SchemaVersion = SchemaVersion::Ifc4;
pub fn tables_are_verified_for(version: SchemaVersion) -> bool {
version == TABLE_SCHEMA_VERSION
}
static SUPERTYPES: &[(&str, &[&str])] = &[
(
"IFCADVANCEDBREP",
&[
"IFCMANIFOLDSOLIDBREP",
"IFCSOLIDMODEL",
"IFCGEOMETRICREPRESENTATIONITEM",
"IFCREPRESENTATIONITEM",
],
),
(
"IFCADVANCEDBREPWITHVOIDS",
&[
"IFCADVANCEDBREP",
"IFCMANIFOLDSOLIDBREP",
"IFCSOLIDMODEL",
"IFCGEOMETRICREPRESENTATIONITEM",
"IFCREPRESENTATIONITEM",
],
),
(
"IFCADVANCEDFACE",
&[
"IFCFACESURFACE",
"IFCFACE",
"IFCTOPOLOGICALREPRESENTATIONITEM",
"IFCREPRESENTATIONITEM",
],
),
(
"IFCAXIS2PLACEMENT2D",
&[
"IFCPLACEMENT",
"IFCGEOMETRICREPRESENTATIONITEM",
"IFCREPRESENTATIONITEM",
],
),
(
"IFCAXIS2PLACEMENT3D",
&[
"IFCPLACEMENT",
"IFCGEOMETRICREPRESENTATIONITEM",
"IFCREPRESENTATIONITEM",
],
),
(
"IFCBLOCK",
&[
"IFCCSGPRIMITIVE3D",
"IFCGEOMETRICREPRESENTATIONITEM",
"IFCREPRESENTATIONITEM",
],
),
(
"IFCBOOLEANCLIPPINGRESULT",
&[
"IFCBOOLEANRESULT",
"IFCGEOMETRICREPRESENTATIONITEM",
"IFCREPRESENTATIONITEM",
],
),
(
"IFCBOOLEANRESULT",
&["IFCGEOMETRICREPRESENTATIONITEM", "IFCREPRESENTATIONITEM"],
),
(
"IFCBOUNDARYCURVE",
&[
"IFCCOMPOSITECURVEONSURFACE",
"IFCCOMPOSITECURVE",
"IFCBOUNDEDCURVE",
"IFCCURVE",
"IFCGEOMETRICREPRESENTATIONITEM",
"IFCREPRESENTATIONITEM",
],
),
(
"IFCBOUNDEDCURVE",
&[
"IFCCURVE",
"IFCGEOMETRICREPRESENTATIONITEM",
"IFCREPRESENTATIONITEM",
],
),
(
"IFCBOUNDEDSURFACE",
&[
"IFCSURFACE",
"IFCGEOMETRICREPRESENTATIONITEM",
"IFCREPRESENTATIONITEM",
],
),
(
"IFCBOXEDHALFSPACE",
&[
"IFCHALFSPACESOLID",
"IFCGEOMETRICREPRESENTATIONITEM",
"IFCREPRESENTATIONITEM",
],
),
(
"IFCBSPLINECURVE",
&[
"IFCBOUNDEDCURVE",
"IFCCURVE",
"IFCGEOMETRICREPRESENTATIONITEM",
"IFCREPRESENTATIONITEM",
],
),
(
"IFCBSPLINECURVEWITHKNOTS",
&[
"IFCBSPLINECURVE",
"IFCBOUNDEDCURVE",
"IFCCURVE",
"IFCGEOMETRICREPRESENTATIONITEM",
"IFCREPRESENTATIONITEM",
],
),
(
"IFCBSPLINESURFACE",
&[
"IFCBOUNDEDSURFACE",
"IFCSURFACE",
"IFCGEOMETRICREPRESENTATIONITEM",
"IFCREPRESENTATIONITEM",
],
),
(
"IFCBSPLINESURFACEWITHKNOTS",
&[
"IFCBSPLINESURFACE",
"IFCBOUNDEDSURFACE",
"IFCSURFACE",
"IFCGEOMETRICREPRESENTATIONITEM",
"IFCREPRESENTATIONITEM",
],
),
(
"IFCCARTESIANPOINT",
&[
"IFCPOINT",
"IFCGEOMETRICREPRESENTATIONITEM",
"IFCREPRESENTATIONITEM",
],
),
(
"IFCCIRCLE",
&[
"IFCCONIC",
"IFCCURVE",
"IFCGEOMETRICREPRESENTATIONITEM",
"IFCREPRESENTATIONITEM",
],
),
(
"IFCCLOSEDSHELL",
&[
"IFCCONNECTEDFACESET",
"IFCTOPOLOGICALREPRESENTATIONITEM",
"IFCREPRESENTATIONITEM",
],
),
(
"IFCCOMPOSITECURVE",
&[
"IFCBOUNDEDCURVE",
"IFCCURVE",
"IFCGEOMETRICREPRESENTATIONITEM",
"IFCREPRESENTATIONITEM",
],
),
(
"IFCCOMPOSITECURVEONSURFACE",
&[
"IFCCOMPOSITECURVE",
"IFCBOUNDEDCURVE",
"IFCCURVE",
"IFCGEOMETRICREPRESENTATIONITEM",
"IFCREPRESENTATIONITEM",
],
),
(
"IFCCONIC",
&[
"IFCCURVE",
"IFCGEOMETRICREPRESENTATIONITEM",
"IFCREPRESENTATIONITEM",
],
),
(
"IFCCSGPRIMITIVE3D",
&["IFCGEOMETRICREPRESENTATIONITEM", "IFCREPRESENTATIONITEM"],
),
(
"IFCCSGSOLID",
&[
"IFCSOLIDMODEL",
"IFCGEOMETRICREPRESENTATIONITEM",
"IFCREPRESENTATIONITEM",
],
),
(
"IFCCURVE",
&["IFCGEOMETRICREPRESENTATIONITEM", "IFCREPRESENTATIONITEM"],
),
(
"IFCCURVEBOUNDEDPLANE",
&[
"IFCBOUNDEDSURFACE",
"IFCSURFACE",
"IFCGEOMETRICREPRESENTATIONITEM",
"IFCREPRESENTATIONITEM",
],
),
(
"IFCCURVEBOUNDEDSURFACE",
&[
"IFCBOUNDEDSURFACE",
"IFCSURFACE",
"IFCGEOMETRICREPRESENTATIONITEM",
"IFCREPRESENTATIONITEM",
],
),
(
"IFCCYLINDRICALSURFACE",
&[
"IFCELEMENTARYSURFACE",
"IFCSURFACE",
"IFCGEOMETRICREPRESENTATIONITEM",
"IFCREPRESENTATIONITEM",
],
),
(
"IFCDIRECTION",
&["IFCGEOMETRICREPRESENTATIONITEM", "IFCREPRESENTATIONITEM"],
),
(
"IFCEDGECURVE",
&[
"IFCEDGE",
"IFCTOPOLOGICALREPRESENTATIONITEM",
"IFCREPRESENTATIONITEM",
],
),
(
"IFCELEMENTARYSURFACE",
&[
"IFCSURFACE",
"IFCGEOMETRICREPRESENTATIONITEM",
"IFCREPRESENTATIONITEM",
],
),
(
"IFCELLIPSE",
&[
"IFCCONIC",
"IFCCURVE",
"IFCGEOMETRICREPRESENTATIONITEM",
"IFCREPRESENTATIONITEM",
],
),
(
"IFCEXTRUDEDAREASOLID",
&[
"IFCSWEPTAREASOLID",
"IFCSOLIDMODEL",
"IFCGEOMETRICREPRESENTATIONITEM",
"IFCREPRESENTATIONITEM",
],
),
(
"IFCEXTRUDEDAREASOLIDTAPERED",
&[
"IFCEXTRUDEDAREASOLID",
"IFCSWEPTAREASOLID",
"IFCSOLIDMODEL",
"IFCGEOMETRICREPRESENTATIONITEM",
"IFCREPRESENTATIONITEM",
],
),
(
"IFCFACEBASEDSURFACEMODEL",
&["IFCGEOMETRICREPRESENTATIONITEM", "IFCREPRESENTATIONITEM"],
),
(
"IFCFACESURFACE",
&[
"IFCFACE",
"IFCTOPOLOGICALREPRESENTATIONITEM",
"IFCREPRESENTATIONITEM",
],
),
(
"IFCFACETEDBREP",
&[
"IFCMANIFOLDSOLIDBREP",
"IFCSOLIDMODEL",
"IFCGEOMETRICREPRESENTATIONITEM",
"IFCREPRESENTATIONITEM",
],
),
(
"IFCFACETEDBREPWITHVOIDS",
&[
"IFCFACETEDBREP",
"IFCMANIFOLDSOLIDBREP",
"IFCSOLIDMODEL",
"IFCGEOMETRICREPRESENTATIONITEM",
"IFCREPRESENTATIONITEM",
],
),
(
"IFCFIXEDREFERENCESWEPTAREASOLID",
&[
"IFCSWEPTAREASOLID",
"IFCSOLIDMODEL",
"IFCGEOMETRICREPRESENTATIONITEM",
"IFCREPRESENTATIONITEM",
],
),
(
"IFCHALFSPACESOLID",
&["IFCGEOMETRICREPRESENTATIONITEM", "IFCREPRESENTATIONITEM"],
),
(
"IFCINDEXEDPOLYCURVE",
&[
"IFCBOUNDEDCURVE",
"IFCCURVE",
"IFCGEOMETRICREPRESENTATIONITEM",
"IFCREPRESENTATIONITEM",
],
),
(
"IFCINTERSECTIONCURVE",
&[
"IFCSURFACECURVE",
"IFCCURVE",
"IFCGEOMETRICREPRESENTATIONITEM",
"IFCREPRESENTATIONITEM",
],
),
(
"IFCLINE",
&[
"IFCCURVE",
"IFCGEOMETRICREPRESENTATIONITEM",
"IFCREPRESENTATIONITEM",
],
),
(
"IFCMANIFOLDSOLIDBREP",
&[
"IFCSOLIDMODEL",
"IFCGEOMETRICREPRESENTATIONITEM",
"IFCREPRESENTATIONITEM",
],
),
(
"IFCOFFSETCURVE2D",
&[
"IFCCURVE",
"IFCGEOMETRICREPRESENTATIONITEM",
"IFCREPRESENTATIONITEM",
],
),
(
"IFCOFFSETCURVE3D",
&[
"IFCCURVE",
"IFCGEOMETRICREPRESENTATIONITEM",
"IFCREPRESENTATIONITEM",
],
),
(
"IFCOUTERBOUNDARYCURVE",
&[
"IFCBOUNDARYCURVE",
"IFCCOMPOSITECURVEONSURFACE",
"IFCCOMPOSITECURVE",
"IFCBOUNDEDCURVE",
"IFCCURVE",
"IFCGEOMETRICREPRESENTATIONITEM",
"IFCREPRESENTATIONITEM",
],
),
(
"IFCPCURVE",
&[
"IFCCURVE",
"IFCGEOMETRICREPRESENTATIONITEM",
"IFCREPRESENTATIONITEM",
],
),
(
"IFCPLANE",
&[
"IFCELEMENTARYSURFACE",
"IFCSURFACE",
"IFCGEOMETRICREPRESENTATIONITEM",
"IFCREPRESENTATIONITEM",
],
),
(
"IFCPOINT",
&["IFCGEOMETRICREPRESENTATIONITEM", "IFCREPRESENTATIONITEM"],
),
(
"IFCPOINTONCURVE",
&[
"IFCPOINT",
"IFCGEOMETRICREPRESENTATIONITEM",
"IFCREPRESENTATIONITEM",
],
),
(
"IFCPOINTONSURFACE",
&[
"IFCPOINT",
"IFCGEOMETRICREPRESENTATIONITEM",
"IFCREPRESENTATIONITEM",
],
),
(
"IFCPOLYGONALBOUNDEDHALFSPACE",
&[
"IFCHALFSPACESOLID",
"IFCGEOMETRICREPRESENTATIONITEM",
"IFCREPRESENTATIONITEM",
],
),
(
"IFCPOLYGONALFACESET",
&[
"IFCTESSELLATEDFACESET",
"IFCTESSELLATEDITEM",
"IFCGEOMETRICREPRESENTATIONITEM",
"IFCREPRESENTATIONITEM",
],
),
(
"IFCPOLYLINE",
&[
"IFCBOUNDEDCURVE",
"IFCCURVE",
"IFCGEOMETRICREPRESENTATIONITEM",
"IFCREPRESENTATIONITEM",
],
),
(
"IFCRATIONALBSPLINECURVEWITHKNOTS",
&[
"IFCBSPLINECURVEWITHKNOTS",
"IFCBSPLINECURVE",
"IFCBOUNDEDCURVE",
"IFCCURVE",
"IFCGEOMETRICREPRESENTATIONITEM",
"IFCREPRESENTATIONITEM",
],
),
(
"IFCRATIONALBSPLINESURFACEWITHKNOTS",
&[
"IFCBSPLINESURFACEWITHKNOTS",
"IFCBSPLINESURFACE",
"IFCBOUNDEDSURFACE",
"IFCSURFACE",
"IFCGEOMETRICREPRESENTATIONITEM",
"IFCREPRESENTATIONITEM",
],
),
(
"IFCRECTANGULARPYRAMID",
&[
"IFCCSGPRIMITIVE3D",
"IFCGEOMETRICREPRESENTATIONITEM",
"IFCREPRESENTATIONITEM",
],
),
(
"IFCRECTANGULARTRIMMEDSURFACE",
&[
"IFCBOUNDEDSURFACE",
"IFCSURFACE",
"IFCGEOMETRICREPRESENTATIONITEM",
"IFCREPRESENTATIONITEM",
],
),
(
"IFCREVOLVEDAREASOLID",
&[
"IFCSWEPTAREASOLID",
"IFCSOLIDMODEL",
"IFCGEOMETRICREPRESENTATIONITEM",
"IFCREPRESENTATIONITEM",
],
),
(
"IFCREVOLVEDAREASOLIDTAPERED",
&[
"IFCREVOLVEDAREASOLID",
"IFCSWEPTAREASOLID",
"IFCSOLIDMODEL",
"IFCGEOMETRICREPRESENTATIONITEM",
"IFCREPRESENTATIONITEM",
],
),
(
"IFCRIGHTCIRCULARCONE",
&[
"IFCCSGPRIMITIVE3D",
"IFCGEOMETRICREPRESENTATIONITEM",
"IFCREPRESENTATIONITEM",
],
),
(
"IFCRIGHTCIRCULARCYLINDER",
&[
"IFCCSGPRIMITIVE3D",
"IFCGEOMETRICREPRESENTATIONITEM",
"IFCREPRESENTATIONITEM",
],
),
(
"IFCSEAMCURVE",
&[
"IFCSURFACECURVE",
"IFCCURVE",
"IFCGEOMETRICREPRESENTATIONITEM",
"IFCREPRESENTATIONITEM",
],
),
(
"IFCSOLIDMODEL",
&["IFCGEOMETRICREPRESENTATIONITEM", "IFCREPRESENTATIONITEM"],
),
(
"IFCSPHERE",
&[
"IFCCSGPRIMITIVE3D",
"IFCGEOMETRICREPRESENTATIONITEM",
"IFCREPRESENTATIONITEM",
],
),
(
"IFCSPHERICALSURFACE",
&[
"IFCELEMENTARYSURFACE",
"IFCSURFACE",
"IFCGEOMETRICREPRESENTATIONITEM",
"IFCREPRESENTATIONITEM",
],
),
(
"IFCSURFACE",
&["IFCGEOMETRICREPRESENTATIONITEM", "IFCREPRESENTATIONITEM"],
),
(
"IFCSURFACECURVE",
&[
"IFCCURVE",
"IFCGEOMETRICREPRESENTATIONITEM",
"IFCREPRESENTATIONITEM",
],
),
(
"IFCSURFACECURVESWEPTAREASOLID",
&[
"IFCSWEPTAREASOLID",
"IFCSOLIDMODEL",
"IFCGEOMETRICREPRESENTATIONITEM",
"IFCREPRESENTATIONITEM",
],
),
(
"IFCSURFACEOFLINEAREXTRUSION",
&[
"IFCSWEPTSURFACE",
"IFCSURFACE",
"IFCGEOMETRICREPRESENTATIONITEM",
"IFCREPRESENTATIONITEM",
],
),
(
"IFCSURFACEOFREVOLUTION",
&[
"IFCSWEPTSURFACE",
"IFCSURFACE",
"IFCGEOMETRICREPRESENTATIONITEM",
"IFCREPRESENTATIONITEM",
],
),
(
"IFCSWEPTAREASOLID",
&[
"IFCSOLIDMODEL",
"IFCGEOMETRICREPRESENTATIONITEM",
"IFCREPRESENTATIONITEM",
],
),
(
"IFCSWEPTDISKSOLID",
&[
"IFCSOLIDMODEL",
"IFCGEOMETRICREPRESENTATIONITEM",
"IFCREPRESENTATIONITEM",
],
),
(
"IFCSWEPTDISKSOLIDPOLYGONAL",
&[
"IFCSWEPTDISKSOLID",
"IFCSOLIDMODEL",
"IFCGEOMETRICREPRESENTATIONITEM",
"IFCREPRESENTATIONITEM",
],
),
(
"IFCSWEPTSURFACE",
&[
"IFCSURFACE",
"IFCGEOMETRICREPRESENTATIONITEM",
"IFCREPRESENTATIONITEM",
],
),
(
"IFCTESSELLATEDFACESET",
&[
"IFCTESSELLATEDITEM",
"IFCGEOMETRICREPRESENTATIONITEM",
"IFCREPRESENTATIONITEM",
],
),
(
"IFCTOROIDALSURFACE",
&[
"IFCELEMENTARYSURFACE",
"IFCSURFACE",
"IFCGEOMETRICREPRESENTATIONITEM",
"IFCREPRESENTATIONITEM",
],
),
(
"IFCTRIANGULATEDFACESET",
&[
"IFCTESSELLATEDFACESET",
"IFCTESSELLATEDITEM",
"IFCGEOMETRICREPRESENTATIONITEM",
"IFCREPRESENTATIONITEM",
],
),
(
"IFCTRIMMEDCURVE",
&[
"IFCBOUNDEDCURVE",
"IFCCURVE",
"IFCGEOMETRICREPRESENTATIONITEM",
"IFCREPRESENTATIONITEM",
],
),
(
"IFCVECTOR",
&["IFCGEOMETRICREPRESENTATIONITEM", "IFCREPRESENTATIONITEM"],
),
(
"IFCVERTEXPOINT",
&[
"IFCVERTEX",
"IFCTOPOLOGICALREPRESENTATIONITEM",
"IFCREPRESENTATIONITEM",
],
),
];
pub fn is_a(entity: &str, ancestor: &str) -> bool {
if entity.eq_ignore_ascii_case(ancestor) {
return true;
}
supertypes_of(entity)
.iter()
.any(|s| s.eq_ignore_ascii_case(ancestor))
}
pub fn supertypes_of(entity: &str) -> &'static [&'static str] {
SUPERTYPES
.iter()
.chain(super::subtype_profile::PROFILE_SUPERTYPES.iter())
.find(|(name, _)| name.eq_ignore_ascii_case(entity))
.map(|(_, chain)| *chain)
.unwrap_or(&[])
}
pub fn known_entities() -> impl Iterator<Item = &'static str> {
SUPERTYPES
.iter()
.chain(super::subtype_profile::PROFILE_SUPERTYPES.iter())
.map(|(name, _)| *name)
}
#[cfg(test)]
mod tests;