@@ -858,6 +858,306 @@ impl TableCollection {
858
858
/// # }
859
859
/// ```
860
860
=> add_provenance, self , ( * self . inner) . provenances) ;
861
+
862
+ /// Set the edge table from an [`OwnedEdgeTable`](`crate::OwnedEdgeTable`)
863
+ ///
864
+ /// # Errors
865
+ ///
866
+ /// Any errors from the C API propagate.
867
+ ///
868
+ /// # Example
869
+ ///
870
+ /// ```rust
871
+ /// # use tskit::TableAccess;
872
+ /// let mut tables = tskit::TableCollection::new(1.0).unwrap();
873
+ /// let mut edges = tskit::OwnedEdgeTable::default();
874
+ /// edges.add_row(0., 1., 0, 12).unwrap();
875
+ /// tables.set_edges(&edges).unwrap();
876
+ /// assert_eq!(tables.edges().num_rows(), 1);
877
+ /// assert_eq!(tables.edges().child(0).unwrap(), 12);
878
+ /// # edges.clear().unwrap();
879
+ /// # assert_eq!(edges.num_rows(), 0);
880
+ /// ```
881
+ pub fn set_edges ( & mut self , edges : & crate :: OwnedEdgeTable ) -> TskReturnValue {
882
+ // SAFETY: neither self nor edges are possible
883
+ // to create with null pointers.
884
+ let rv = unsafe {
885
+ ll_bindings:: tsk_edge_table_set_columns (
886
+ & mut ( * self . inner ) . edges ,
887
+ ( * edges. as_ptr ( ) ) . num_rows ,
888
+ ( * edges. as_ptr ( ) ) . left ,
889
+ ( * edges. as_ptr ( ) ) . right ,
890
+ ( * edges. as_ptr ( ) ) . parent ,
891
+ ( * edges. as_ptr ( ) ) . child ,
892
+ ( * edges. as_ptr ( ) ) . metadata ,
893
+ ( * edges. as_ptr ( ) ) . metadata_offset ,
894
+ )
895
+ } ;
896
+ handle_tsk_return_value ! ( rv)
897
+ }
898
+
899
+ /// Set the node table from an [`OwnedNodeTable`](`crate::OwnedNodeTable`)
900
+ ///
901
+ /// # Errors
902
+ ///
903
+ /// Any errors from the C API propagate.
904
+ ///
905
+ /// # Example
906
+ ///
907
+ /// ```rust
908
+ /// # use tskit::TableAccess;
909
+ /// let mut tables = tskit::TableCollection::new(1.0).unwrap();
910
+ /// let mut nodes = tskit::OwnedNodeTable::default();
911
+ /// nodes.add_row(0, 10.0, -1, -1).unwrap();
912
+ /// tables.set_nodes(&nodes).unwrap();
913
+ /// assert_eq!(tables.nodes().num_rows(), 1);
914
+ /// assert_eq!(tables.nodes().time(0).unwrap(), 10.0);
915
+ /// # nodes.clear().unwrap();
916
+ /// # assert_eq!(nodes.num_rows(), 0);
917
+ /// ```
918
+ pub fn set_nodes ( & mut self , nodes : & crate :: OwnedNodeTable ) -> TskReturnValue {
919
+ // SAFETY: neither self nor nodes are possible
920
+ // to create with null pointers.
921
+ let rv = unsafe {
922
+ ll_bindings:: tsk_node_table_set_columns (
923
+ & mut ( * self . inner ) . nodes ,
924
+ ( * nodes. as_ptr ( ) ) . num_rows ,
925
+ ( * nodes. as_ptr ( ) ) . flags ,
926
+ ( * nodes. as_ptr ( ) ) . time ,
927
+ ( * nodes. as_ptr ( ) ) . population ,
928
+ ( * nodes. as_ptr ( ) ) . individual ,
929
+ ( * nodes. as_ptr ( ) ) . metadata ,
930
+ ( * nodes. as_ptr ( ) ) . metadata_offset ,
931
+ )
932
+ } ;
933
+ handle_tsk_return_value ! ( rv)
934
+ }
935
+
936
+ /// Set the site table from an [`OwnedSiteTable`](`crate::OwnedSiteTable`)
937
+ ///
938
+ /// # Errors
939
+ ///
940
+ /// Any errors from the C API propagate.
941
+ ///
942
+ /// # Example
943
+ ///
944
+ /// ```rust
945
+ /// # use tskit::TableAccess;
946
+ /// let mut tables = tskit::TableCollection::new(1.0).unwrap();
947
+ /// let mut sites = tskit::OwnedSiteTable::default();
948
+ /// sites.add_row(11.0, None).unwrap();
949
+ /// tables.set_sites(&sites).unwrap();
950
+ /// assert_eq!(tables.sites().num_rows(), 1);
951
+ /// assert_eq!(tables.sites().position(0).unwrap(), 11.0);
952
+ /// # sites.clear().unwrap();
953
+ /// # assert_eq!(sites.num_rows(), 0);
954
+ /// ```
955
+ pub fn set_sites ( & mut self , sites : & crate :: OwnedSiteTable ) -> TskReturnValue {
956
+ // SAFETY: neither self nor nodes are possible
957
+ // to create with null pointers.
958
+ let rv = unsafe {
959
+ ll_bindings:: tsk_site_table_set_columns (
960
+ & mut ( * self . inner ) . sites ,
961
+ ( * sites. as_ptr ( ) ) . num_rows ,
962
+ ( * sites. as_ptr ( ) ) . position ,
963
+ ( * sites. as_ptr ( ) ) . ancestral_state ,
964
+ ( * sites. as_ptr ( ) ) . ancestral_state_offset ,
965
+ ( * sites. as_ptr ( ) ) . metadata ,
966
+ ( * sites. as_ptr ( ) ) . metadata_offset ,
967
+ )
968
+ } ;
969
+ handle_tsk_return_value ! ( rv)
970
+ }
971
+
972
+ /// Set the mutation table from an [`OwnedMutationTable`](`crate::OwnedSiteTable`)
973
+ ///
974
+ /// # Errors
975
+ ///
976
+ /// Any errors from the C API propagate.
977
+ ///
978
+ /// # Example
979
+ ///
980
+ /// ```rust
981
+ /// # use tskit::TableAccess;
982
+ /// let mut tables = tskit::TableCollection::new(1.0).unwrap();
983
+ /// let mut mutations = tskit::OwnedMutationTable::default();
984
+ /// mutations.add_row(14, 12, -1, 11.3, None).unwrap();
985
+ /// tables.set_mutations(&mutations).unwrap();
986
+ /// assert_eq!(tables.mutations().num_rows(), 1);
987
+ /// assert_eq!(tables.mutations().site(0).unwrap(), 14);
988
+ /// # mutations.clear().unwrap();
989
+ /// # assert_eq!(mutations.num_rows(), 0);
990
+ /// ```
991
+ pub fn set_mutations ( & mut self , mutations : & crate :: OwnedMutationTable ) -> TskReturnValue {
992
+ // SAFETY: neither self nor nodes are possible
993
+ // to create with null pointers.
994
+ let rv = unsafe {
995
+ ll_bindings:: tsk_mutation_table_set_columns (
996
+ & mut ( * self . inner ) . mutations ,
997
+ ( * mutations. as_ptr ( ) ) . num_rows ,
998
+ ( * mutations. as_ptr ( ) ) . site ,
999
+ ( * mutations. as_ptr ( ) ) . node ,
1000
+ ( * mutations. as_ptr ( ) ) . parent ,
1001
+ ( * mutations. as_ptr ( ) ) . time ,
1002
+ ( * mutations. as_ptr ( ) ) . derived_state ,
1003
+ ( * mutations. as_ptr ( ) ) . derived_state_offset ,
1004
+ ( * mutations. as_ptr ( ) ) . metadata ,
1005
+ ( * mutations. as_ptr ( ) ) . metadata_offset ,
1006
+ )
1007
+ } ;
1008
+ handle_tsk_return_value ! ( rv)
1009
+ }
1010
+
1011
+ /// Set the individual table from an [`OwnedIndividualTable`](`crate::OwnedSiteTable`)
1012
+ ///
1013
+ /// # Errors
1014
+ ///
1015
+ /// Any errors from the C API propagate.
1016
+ ///
1017
+ /// # Example
1018
+ ///
1019
+ /// ```rust
1020
+ /// # use tskit::TableAccess;
1021
+ /// let mut tables = tskit::TableCollection::new(1.0).unwrap();
1022
+ /// let mut individuals = tskit::OwnedIndividualTable::default();
1023
+ /// individuals.add_row(0, [0.1, 10.0], None).unwrap();
1024
+ /// tables.set_individuals(&individuals).unwrap();
1025
+ /// assert_eq!(tables.individuals().num_rows(), 1);
1026
+ /// let expected = vec![tskit::Location::from(0.1), tskit::Location::from(10.0)];
1027
+ /// assert_eq!(tables.individuals().location(0).unwrap(), Some(expected.as_slice()));
1028
+ /// # individuals.clear().unwrap();
1029
+ /// # assert_eq!(individuals.num_rows(), 0);
1030
+ /// ```
1031
+ pub fn set_individuals ( & mut self , individuals : & crate :: OwnedIndividualTable ) -> TskReturnValue {
1032
+ // SAFETY: neither self nor nodes are possible
1033
+ // to create with null pointers.
1034
+ let rv = unsafe {
1035
+ ll_bindings:: tsk_individual_table_set_columns (
1036
+ & mut ( * self . inner ) . individuals ,
1037
+ ( * individuals. as_ptr ( ) ) . num_rows ,
1038
+ ( * individuals. as_ptr ( ) ) . flags ,
1039
+ ( * individuals. as_ptr ( ) ) . location ,
1040
+ ( * individuals. as_ptr ( ) ) . location_offset ,
1041
+ ( * individuals. as_ptr ( ) ) . parents ,
1042
+ ( * individuals. as_ptr ( ) ) . parents_offset ,
1043
+ ( * individuals. as_ptr ( ) ) . metadata ,
1044
+ ( * individuals. as_ptr ( ) ) . metadata_offset ,
1045
+ )
1046
+ } ;
1047
+ handle_tsk_return_value ! ( rv)
1048
+ }
1049
+
1050
+ /// Set the migration table from an [`OwnedMigrationTable`](`crate::OwnedSiteTable`)
1051
+ ///
1052
+ /// # Errors
1053
+ ///
1054
+ /// Any errors from the C API propagate.
1055
+ ///
1056
+ /// # Example
1057
+ ///
1058
+ /// ```rust
1059
+ /// # use tskit::TableAccess;
1060
+ /// let mut tables = tskit::TableCollection::new(1.0).unwrap();
1061
+ /// let mut migrations = tskit::OwnedMigrationTable::default();
1062
+ /// migrations.add_row((0.25, 0.37), 1, (0, 1), 111.0).unwrap();
1063
+ /// tables.set_migrations(&migrations).unwrap();
1064
+ /// assert_eq!(tables.migrations().num_rows(), 1);
1065
+ /// assert_eq!(tables.migrations().time(0).unwrap(), 111.0);
1066
+ /// # migrations.clear().unwrap();
1067
+ /// # assert_eq!(migrations.num_rows(), 0);
1068
+ /// ```
1069
+ pub fn set_migrations ( & mut self , migrations : & crate :: OwnedMigrationTable ) -> TskReturnValue {
1070
+ // SAFETY: neither self nor edges are possible
1071
+ // to create with null pointers.
1072
+ let rv = unsafe {
1073
+ ll_bindings:: tsk_migration_table_set_columns (
1074
+ & mut ( * self . inner ) . migrations ,
1075
+ ( * migrations. as_ptr ( ) ) . num_rows ,
1076
+ ( * migrations. as_ptr ( ) ) . left ,
1077
+ ( * migrations. as_ptr ( ) ) . right ,
1078
+ ( * migrations. as_ptr ( ) ) . node ,
1079
+ ( * migrations. as_ptr ( ) ) . source ,
1080
+ ( * migrations. as_ptr ( ) ) . dest ,
1081
+ ( * migrations. as_ptr ( ) ) . time ,
1082
+ ( * migrations. as_ptr ( ) ) . metadata ,
1083
+ ( * migrations. as_ptr ( ) ) . metadata_offset ,
1084
+ )
1085
+ } ;
1086
+ handle_tsk_return_value ! ( rv)
1087
+ }
1088
+
1089
+ /// Set the population table from an [`OwnedPopulationTable`](`crate::OwnedSiteTable`)
1090
+ ///
1091
+ /// # Errors
1092
+ ///
1093
+ /// Any errors from the C API propagate.
1094
+ ///
1095
+ /// # Example
1096
+ ///
1097
+ /// ```rust
1098
+ /// # use tskit::TableAccess;
1099
+ /// let mut tables = tskit::TableCollection::new(1.0).unwrap();
1100
+ /// let mut populations = tskit::OwnedPopulationTable::default();
1101
+ /// populations.add_row().unwrap();
1102
+ /// tables.set_populations(&populations).unwrap();
1103
+ /// assert_eq!(tables.populations().num_rows(), 1);
1104
+ /// # populations.clear().unwrap();
1105
+ /// # assert_eq!(populations.num_rows(), 0);
1106
+ /// ```
1107
+ pub fn set_populations ( & mut self , populations : & crate :: OwnedPopulationTable ) -> TskReturnValue {
1108
+ // SAFETY: neither self nor edges are possible
1109
+ // to create with null pointers.
1110
+ let rv = unsafe {
1111
+ ll_bindings:: tsk_population_table_set_columns (
1112
+ & mut ( * self . inner ) . populations ,
1113
+ ( * populations. as_ptr ( ) ) . num_rows ,
1114
+ ( * populations. as_ptr ( ) ) . metadata ,
1115
+ ( * populations. as_ptr ( ) ) . metadata_offset ,
1116
+ )
1117
+ } ;
1118
+ handle_tsk_return_value ! ( rv)
1119
+ }
1120
+
1121
+ #[ cfg( any( doc, feature = "provenance" ) ) ]
1122
+ /// Set the provenance table from an [`OwnedProvenanceTable`](`crate::provenance::OwnedSiteTable`)
1123
+ ///
1124
+ /// # Errors
1125
+ ///
1126
+ /// Any errors from the C API propagate.
1127
+ ///
1128
+ /// # Example
1129
+ ///
1130
+ /// ```rust
1131
+ /// # #[cfg(feature="provenance")] {
1132
+ /// # use tskit::TableAccess;
1133
+ /// let mut tables = tskit::TableCollection::new(1.0).unwrap();
1134
+ /// let mut provenances = tskit::provenance::OwnedProvenanceTable::default();
1135
+ /// provenances.add_row("I like pancakes").unwrap();
1136
+ /// tables.set_provenances(&provenances).unwrap();
1137
+ /// assert_eq!(tables.provenances().num_rows(), 1);
1138
+ /// assert_eq!(tables.provenances().record(0).unwrap(), "I like pancakes");
1139
+ /// # provenances.clear().unwrap();
1140
+ /// # assert_eq!(provenances.num_rows(), 0);
1141
+ /// # }
1142
+ /// ```
1143
+ pub fn set_provenances (
1144
+ & mut self ,
1145
+ provenances : & crate :: provenance:: OwnedProvenanceTable ,
1146
+ ) -> TskReturnValue {
1147
+ // SAFETY: neither self nor edges are possible
1148
+ // to create with null pointers.
1149
+ let rv = unsafe {
1150
+ ll_bindings:: tsk_provenance_table_set_columns (
1151
+ & mut ( * self . inner ) . provenances ,
1152
+ ( * provenances. as_ptr ( ) ) . num_rows ,
1153
+ ( * provenances. as_ptr ( ) ) . timestamp ,
1154
+ ( * provenances. as_ptr ( ) ) . timestamp_offset ,
1155
+ ( * provenances. as_ptr ( ) ) . record ,
1156
+ ( * provenances. as_ptr ( ) ) . record_offset ,
1157
+ )
1158
+ } ;
1159
+ handle_tsk_return_value ! ( rv)
1160
+ }
861
1161
}
862
1162
863
1163
impl TableAccess for TableCollection {
0 commit comments