Skip to main content

ifc_tabular/
lib.rs

1//! Structured IFC value containers indexed by position or time.
2//!
3//! A table indexes values by row and column; a time series indexes them
4//! by time. Neither carries domain meaning of its own: both bottom out in
5//! lists of `IfcValue`, and both appear side by side in the schema's own
6//! `IfcMetricValueSelect` and `IfcObjectReferenceSelect`.
7//!
8//! # Cells are the caller's to type
9//!
10//! A cell is an `IfcValue`: a SELECT over measure types. `4.2` and
11//! `IFCLENGTHMEASURE(4.2)` are different files, and only the second can be
12//! converted or compared dimensionally. This crate never invents a measure;
13//! the caller passes a `Value` and chooses.
14//!
15//! # Derived attributes are not stored
16//!
17//! `IfcTable` DERIVEs three counts from its rows. STEP writes a derived
18//! attribute as `*`, not as a number, so they are emitted as
19//! [`ifc_model::Value::Derived`] and never computed into the file.
20//!
21//! # Reading back
22//!
23//! [`TabularView`] borrows a model and returns [`Table`] and
24//! [`TimeSeries`] views under a declared IFC4 or IFC4X3 schema. A read
25//! reports every malformed slot and WR1/WR2 violation as a
26//! [`TabularIssue`] rather than dropping it.
27
28mod error;
29mod read;
30mod series;
31mod table;
32
33pub use error::{TabularError, TabularReadError, TabularReadResult, TabularResult};
34pub use read::{SeriesValue, TabularIssue, TabularView, TimeSeries, TimeSeriesKind};
35pub use read::{Table, TableColumn, TableRow};
36pub use series::{add_irregular_time_series, add_regular_time_series, SeriesDraft};
37pub use series::{add_irregular_value, add_time_series_value};
38pub use table::{add_table, add_table_column, add_table_row, ColumnDraft};