# HG changeset patch
# User Balazs Dezso <deba@inf.elte.hu>
# Date 1215180751 -7200
# Node ID 1e6af6f0843c373a0579fc699ac4a83bb4f5948a
# Parent a63ed81c57babfd26265bcf154436fb8600c13c3
Move to private copy constrcutors
diff -r a63ed81c57ba -r 1e6af6f0843c lemon/lgf_reader.h
a
|
b
|
|
386 | 386 | |
387 | 387 | } |
388 | 388 | |
| 389 | template <typename Digraph> |
| 390 | class DigraphReader; |
| 391 | |
| 392 | template <typename Digraph> |
| 393 | DigraphReader<Digraph> digraphReader(std::istream& is, Digraph& digraph); |
| 394 | |
| 395 | template <typename Digraph> |
| 396 | DigraphReader<Digraph> digraphReader(const std::string& fn, Digraph& digraph); |
| 397 | |
| 398 | template <typename Digraph> |
| 399 | DigraphReader<Digraph> digraphReader(const char *fn, Digraph& digraph); |
| 400 | |
389 | 401 | /// \ingroup lemon_io |
390 | 402 | /// |
391 | 403 | /// \brief LGF reader for directed graphs |
… |
… |
|
509 | 521 | _use_nodes(false), _use_arcs(false), |
510 | 522 | _skip_nodes(false), _skip_arcs(false) {} |
511 | 523 | |
512 | | /// \brief Copy constructor |
513 | | /// |
514 | | /// The copy constructor transfers all data from the other reader, |
515 | | /// therefore the copied reader will not be usable more. |
516 | | DigraphReader(DigraphReader& other) |
517 | | : _is(other._is), local_is(other.local_is), _digraph(other._digraph), |
518 | | _use_nodes(other._use_nodes), _use_arcs(other._use_arcs), |
519 | | _skip_nodes(other._skip_nodes), _skip_arcs(other._skip_arcs) { |
520 | | |
521 | | other._is = 0; |
522 | | other.local_is = false; |
523 | | |
524 | | _node_index.swap(other._node_index); |
525 | | _arc_index.swap(other._arc_index); |
526 | | |
527 | | _node_maps.swap(other._node_maps); |
528 | | _arc_maps.swap(other._arc_maps); |
529 | | _attributes.swap(other._attributes); |
530 | | |
531 | | _nodes_caption = other._nodes_caption; |
532 | | _arcs_caption = other._arcs_caption; |
533 | | _attributes_caption = other._attributes_caption; |
534 | | |
535 | | } |
536 | | |
537 | 524 | /// \brief Destructor |
538 | 525 | ~DigraphReader() { |
539 | 526 | for (typename NodeMaps::iterator it = _node_maps.begin(); |
… |
… |
|
558 | 545 | } |
559 | 546 | |
560 | 547 | private: |
561 | | |
| 548 | |
| 549 | friend DigraphReader<Digraph> digraphReader<>(std::istream& is, |
| 550 | Digraph& digraph); |
| 551 | friend DigraphReader<Digraph> digraphReader<>(const std::string& fn, |
| 552 | Digraph& digraph); |
| 553 | friend DigraphReader<Digraph> digraphReader<>(const char *fn, |
| 554 | Digraph& digraph); |
| 555 | |
| 556 | DigraphReader(DigraphReader& other) |
| 557 | : _is(other._is), local_is(other.local_is), _digraph(other._digraph), |
| 558 | _use_nodes(other._use_nodes), _use_arcs(other._use_arcs), |
| 559 | _skip_nodes(other._skip_nodes), _skip_arcs(other._skip_arcs) { |
| 560 | |
| 561 | other._is = 0; |
| 562 | other.local_is = false; |
| 563 | |
| 564 | _node_index.swap(other._node_index); |
| 565 | _arc_index.swap(other._arc_index); |
| 566 | |
| 567 | _node_maps.swap(other._node_maps); |
| 568 | _arc_maps.swap(other._arc_maps); |
| 569 | _attributes.swap(other._attributes); |
| 570 | |
| 571 | _nodes_caption = other._nodes_caption; |
| 572 | _arcs_caption = other._arcs_caption; |
| 573 | _attributes_caption = other._attributes_caption; |
| 574 | |
| 575 | } |
| 576 | |
562 | 577 | DigraphReader& operator=(const DigraphReader&); |
563 | 578 | |
564 | 579 | public: |
… |
… |
|
1182 | 1197 | return tmp; |
1183 | 1198 | } |
1184 | 1199 | |
| 1200 | template <typename Graph> |
| 1201 | class GraphReader; |
| 1202 | |
| 1203 | template <typename Graph> |
| 1204 | GraphReader<Graph> graphReader(std::istream& is, Graph& graph); |
| 1205 | |
| 1206 | template <typename Graph> |
| 1207 | GraphReader<Graph> graphReader(const std::string& fn, Graph& graph); |
| 1208 | |
| 1209 | template <typename Graph> |
| 1210 | GraphReader<Graph> graphReader(const char *fn, Graph& graph); |
| 1211 | |
1185 | 1212 | /// \ingroup lemon_io |
1186 | 1213 | /// |
1187 | 1214 | /// \brief LGF reader for undirected graphs |
… |
… |
|
1260 | 1287 | _use_nodes(false), _use_edges(false), |
1261 | 1288 | _skip_nodes(false), _skip_edges(false) {} |
1262 | 1289 | |
1263 | | /// \brief Copy constructor |
1264 | | /// |
1265 | | /// The copy constructor transfers all data from the other reader, |
1266 | | /// therefore the copied reader will not be usable more. |
1267 | | GraphReader(GraphReader& other) |
1268 | | : _is(other._is), local_is(other.local_is), _graph(other._graph), |
1269 | | _use_nodes(other._use_nodes), _use_edges(other._use_edges), |
1270 | | _skip_nodes(other._skip_nodes), _skip_edges(other._skip_edges) { |
1271 | | |
1272 | | other._is = 0; |
1273 | | other.local_is = false; |
1274 | | |
1275 | | _node_index.swap(other._node_index); |
1276 | | _edge_index.swap(other._edge_index); |
1277 | | |
1278 | | _node_maps.swap(other._node_maps); |
1279 | | _edge_maps.swap(other._edge_maps); |
1280 | | _attributes.swap(other._attributes); |
1281 | | |
1282 | | _nodes_caption = other._nodes_caption; |
1283 | | _edges_caption = other._edges_caption; |
1284 | | _attributes_caption = other._attributes_caption; |
1285 | | |
1286 | | } |
1287 | | |
1288 | 1290 | /// \brief Destructor |
1289 | 1291 | ~GraphReader() { |
1290 | 1292 | for (typename NodeMaps::iterator it = _node_maps.begin(); |
… |
… |
|
1309 | 1311 | } |
1310 | 1312 | |
1311 | 1313 | private: |
1312 | | |
| 1314 | friend GraphReader<Graph> graphReader<>(std::istream& is, Graph& graph); |
| 1315 | friend GraphReader<Graph> graphReader<>(const std::string& fn, |
| 1316 | Graph& graph); |
| 1317 | friend GraphReader<Graph> graphReader<>(const char *fn, Graph& graph); |
| 1318 | |
| 1319 | GraphReader(GraphReader& other) |
| 1320 | : _is(other._is), local_is(other.local_is), _graph(other._graph), |
| 1321 | _use_nodes(other._use_nodes), _use_edges(other._use_edges), |
| 1322 | _skip_nodes(other._skip_nodes), _skip_edges(other._skip_edges) { |
| 1323 | |
| 1324 | other._is = 0; |
| 1325 | other.local_is = false; |
| 1326 | |
| 1327 | _node_index.swap(other._node_index); |
| 1328 | _edge_index.swap(other._edge_index); |
| 1329 | |
| 1330 | _node_maps.swap(other._node_maps); |
| 1331 | _edge_maps.swap(other._edge_maps); |
| 1332 | _attributes.swap(other._attributes); |
| 1333 | |
| 1334 | _nodes_caption = other._nodes_caption; |
| 1335 | _edges_caption = other._edges_caption; |
| 1336 | _attributes_caption = other._attributes_caption; |
| 1337 | |
| 1338 | } |
| 1339 | |
1313 | 1340 | GraphReader& operator=(const GraphReader&); |
1314 | 1341 | |
1315 | 1342 | public: |
… |
… |
|
1977 | 2004 | return tmp; |
1978 | 2005 | } |
1979 | 2006 | |
| 2007 | class SectionReader; |
| 2008 | |
| 2009 | SectionReader sectionReader(std::istream& is); |
| 2010 | SectionReader sectionReader(const std::string& fn); |
| 2011 | SectionReader sectionReader(const char* fn); |
| 2012 | |
1980 | 2013 | /// \brief Section reader class |
1981 | 2014 | /// |
1982 | 2015 | /// In the \e LGF file extra sections can be placed, which contain |
… |
… |
|
2019 | 2052 | SectionReader(const char* fn) |
2020 | 2053 | : _is(new std::ifstream(fn)), local_is(true) {} |
2021 | 2054 | |
2022 | | /// \brief Copy constructor |
2023 | | /// |
2024 | | /// The copy constructor transfers all data from the other reader, |
2025 | | /// therefore the copied reader will not be usable more. |
2026 | | SectionReader(SectionReader& other) |
2027 | | : _is(other._is), local_is(other.local_is) { |
2028 | | |
2029 | | other._is = 0; |
2030 | | other.local_is = false; |
2031 | | |
2032 | | _sections.swap(other._sections); |
2033 | | } |
2034 | | |
2035 | 2055 | /// \brief Destructor |
2036 | 2056 | ~SectionReader() { |
2037 | 2057 | for (Sections::iterator it = _sections.begin(); |
… |
… |
|
2046 | 2066 | } |
2047 | 2067 | |
2048 | 2068 | private: |
| 2069 | |
| 2070 | friend SectionReader sectionReader(std::istream& is); |
| 2071 | friend SectionReader sectionReader(const std::string& fn); |
| 2072 | friend SectionReader sectionReader(const char* fn); |
| 2073 | |
| 2074 | SectionReader(SectionReader& other) |
| 2075 | : _is(other._is), local_is(other.local_is) { |
| 2076 | |
| 2077 | other._is = 0; |
| 2078 | other.local_is = false; |
| 2079 | |
| 2080 | _sections.swap(other._sections); |
| 2081 | } |
2049 | 2082 | |
2050 | 2083 | SectionReader& operator=(const SectionReader&); |
2051 | 2084 | |
… |
… |
|
2295 | 2328 | /// file. |
2296 | 2329 | LgfContents(const char* fn) |
2297 | 2330 | : _is(new std::ifstream(fn)), local_is(true) {} |
2298 | | |
2299 | | /// \brief Copy constructor |
2300 | | /// |
2301 | | /// The copy constructor transfers all data from the other reader, |
2302 | | /// therefore the copied reader will not be usable more. |
2303 | | LgfContents(LgfContents& other) |
2304 | | : _is(other._is), local_is(other.local_is) { |
2305 | | |
2306 | | other._is = 0; |
2307 | | other.local_is = false; |
2308 | | |
2309 | | _node_sections.swap(other._node_sections); |
2310 | | _edge_sections.swap(other._edge_sections); |
2311 | | _attribute_sections.swap(other._attribute_sections); |
2312 | | _extra_sections.swap(other._extra_sections); |
2313 | | |
2314 | | _arc_sections.swap(other._arc_sections); |
2315 | | |
2316 | | _node_maps.swap(other._node_maps); |
2317 | | _edge_maps.swap(other._edge_maps); |
2318 | | _attributes.swap(other._attributes); |
2319 | | } |
2320 | 2331 | |
2321 | 2332 | /// \brief Destructor |
2322 | 2333 | ~LgfContents() { |
2323 | 2334 | if (local_is) delete _is; |
2324 | 2335 | } |
| 2336 | |
| 2337 | private: |
| 2338 | |
| 2339 | LgfContents(const LgfContents&); |
| 2340 | LgfContents& operator=(const LgfContents&); |
| 2341 | |
| 2342 | public: |
2325 | 2343 | |
2326 | 2344 | |
2327 | 2345 | /// \name Node sections |
diff -r a63ed81c57ba -r 1e6af6f0843c lemon/lgf_writer.h
a
|
b
|
|
304 | 304 | } |
305 | 305 | |
306 | 306 | } |
| 307 | |
| 308 | template <typename Digraph> |
| 309 | class DigraphWriter; |
| 310 | |
| 311 | template <typename Digraph> |
| 312 | DigraphWriter<Digraph> digraphWriter(std::ostream& os, |
| 313 | const Digraph& digraph); |
| 314 | |
| 315 | template <typename Digraph> |
| 316 | DigraphWriter<Digraph> digraphWriter(const std::string& fn, |
| 317 | const Digraph& digraph); |
| 318 | |
| 319 | template <typename Digraph> |
| 320 | DigraphWriter<Digraph> digraphWriter(const char *fn, |
| 321 | const Digraph& digraph); |
307 | 322 | |
308 | 323 | /// \ingroup lemon_io |
309 | 324 | /// |
… |
… |
|
362 | 377 | std::ostream* _os; |
363 | 378 | bool local_os; |
364 | 379 | |
365 | | Digraph& _digraph; |
| 380 | const Digraph& _digraph; |
366 | 381 | |
367 | 382 | std::string _nodes_caption; |
368 | 383 | std::string _arcs_caption; |
… |
… |
|
394 | 409 | /// |
395 | 410 | /// Construct a directed graph writer, which writes to the given |
396 | 411 | /// output stream. |
397 | | DigraphWriter(std::ostream& is, Digraph& digraph) |
| 412 | DigraphWriter(std::ostream& is, const Digraph& digraph) |
398 | 413 | : _os(&is), local_os(false), _digraph(digraph), |
399 | 414 | _skip_nodes(false), _skip_arcs(false) {} |
400 | 415 | |
… |
… |
|
402 | 417 | /// |
403 | 418 | /// Construct a directed graph writer, which writes to the given |
404 | 419 | /// output file. |
405 | | DigraphWriter(const std::string& fn, Digraph& digraph) |
| 420 | DigraphWriter(const std::string& fn, const Digraph& digraph) |
406 | 421 | : _os(new std::ofstream(fn.c_str())), local_os(true), _digraph(digraph), |
407 | 422 | _skip_nodes(false), _skip_arcs(false) {} |
408 | 423 | |
… |
… |
|
410 | 425 | /// |
411 | 426 | /// Construct a directed graph writer, which writes to the given |
412 | 427 | /// output file. |
413 | | DigraphWriter(const char* fn, Digraph& digraph) |
| 428 | DigraphWriter(const char* fn, const Digraph& digraph) |
414 | 429 | : _os(new std::ofstream(fn)), local_os(true), _digraph(digraph), |
415 | 430 | _skip_nodes(false), _skip_arcs(false) {} |
416 | | |
417 | | /// \brief Copy constructor |
418 | | /// |
419 | | /// The copy constructor transfers all data from the other writer, |
420 | | /// therefore the copied writer will not be usable more. |
421 | | DigraphWriter(DigraphWriter& other) |
422 | | : _os(other._os), local_os(other.local_os), _digraph(other._digraph), |
423 | | _skip_nodes(other._skip_nodes), _skip_arcs(other._skip_arcs) { |
424 | | |
425 | | other._os = 0; |
426 | | other.local_os = false; |
427 | | |
428 | | _node_index.swap(other._node_index); |
429 | | _arc_index.swap(other._arc_index); |
430 | | |
431 | | _node_maps.swap(other._node_maps); |
432 | | _arc_maps.swap(other._arc_maps); |
433 | | _attributes.swap(other._attributes); |
434 | | |
435 | | _nodes_caption = other._nodes_caption; |
436 | | _arcs_caption = other._arcs_caption; |
437 | | _attributes_caption = other._attributes_caption; |
438 | | } |
439 | 431 | |
440 | 432 | /// \brief Destructor |
441 | 433 | ~DigraphWriter() { |
… |
… |
|
460 | 452 | } |
461 | 453 | |
462 | 454 | private: |
| 455 | |
| 456 | friend DigraphWriter<Digraph> digraphWriter<>(std::ostream& os, |
| 457 | const Digraph& digraph); |
| 458 | friend DigraphWriter<Digraph> digraphWriter<>(const std::string& fn, |
| 459 | const Digraph& digraph); |
| 460 | friend DigraphWriter<Digraph> digraphWriter<>(const char *fn, |
| 461 | const Digraph& digraph); |
| 462 | |
| 463 | DigraphWriter(DigraphWriter& other) |
| 464 | : _os(other._os), local_os(other.local_os), _digraph(other._digraph), |
| 465 | _skip_nodes(other._skip_nodes), _skip_arcs(other._skip_arcs) { |
| 466 | |
| 467 | other._os = 0; |
| 468 | other.local_os = false; |
| 469 | |
| 470 | _node_index.swap(other._node_index); |
| 471 | _arc_index.swap(other._arc_index); |
| 472 | |
| 473 | _node_maps.swap(other._node_maps); |
| 474 | _arc_maps.swap(other._arc_maps); |
| 475 | _attributes.swap(other._attributes); |
| 476 | |
| 477 | _nodes_caption = other._nodes_caption; |
| 478 | _arcs_caption = other._arcs_caption; |
| 479 | _attributes_caption = other._attributes_caption; |
| 480 | } |
463 | 481 | |
464 | 482 | DigraphWriter& operator=(const DigraphWriter&); |
465 | 483 | |
… |
… |
|
844 | 862 | |
845 | 863 | /// \relates DigraphWriter |
846 | 864 | template <typename Digraph> |
847 | | DigraphWriter<Digraph> digraphWriter(std::ostream& os, Digraph& digraph) { |
| 865 | DigraphWriter<Digraph> digraphWriter(std::ostream& os, |
| 866 | const Digraph& digraph) { |
848 | 867 | DigraphWriter<Digraph> tmp(os, digraph); |
849 | 868 | return tmp; |
850 | 869 | } |
… |
… |
|
852 | 871 | /// \relates DigraphWriter |
853 | 872 | template <typename Digraph> |
854 | 873 | DigraphWriter<Digraph> digraphWriter(const std::string& fn, |
855 | | Digraph& digraph) { |
| 874 | const Digraph& digraph) { |
856 | 875 | DigraphWriter<Digraph> tmp(fn, digraph); |
857 | 876 | return tmp; |
858 | 877 | } |
859 | 878 | |
860 | 879 | /// \relates DigraphWriter |
861 | 880 | template <typename Digraph> |
862 | | DigraphWriter<Digraph> digraphWriter(const char* fn, Digraph& digraph) { |
| 881 | DigraphWriter<Digraph> digraphWriter(const char* fn, |
| 882 | const Digraph& digraph) { |
863 | 883 | DigraphWriter<Digraph> tmp(fn, digraph); |
864 | 884 | return tmp; |
865 | 885 | } |
| 886 | |
| 887 | template <typename Graph> |
| 888 | class GraphWriter; |
| 889 | |
| 890 | template <typename Graph> |
| 891 | GraphWriter<Graph> graphWriter(std::ostream& os, const Graph& graph); |
| 892 | |
| 893 | template <typename Graph> |
| 894 | GraphWriter<Graph> graphWriter(const std::string& fn, const Graph& graph); |
| 895 | |
| 896 | template <typename Graph> |
| 897 | GraphWriter<Graph> graphWriter(const char *fn, const Graph& graph); |
866 | 898 | |
867 | 899 | /// \ingroup lemon_io |
868 | 900 | /// |
… |
… |
|
914 | 946 | /// |
915 | 947 | /// Construct a directed graph writer, which writes to the given |
916 | 948 | /// output stream. |
917 | | GraphWriter(std::ostream& is, Graph& graph) |
| 949 | GraphWriter(std::ostream& is, const Graph& graph) |
918 | 950 | : _os(&is), local_os(false), _graph(graph), |
919 | 951 | _skip_nodes(false), _skip_edges(false) {} |
920 | 952 | |
… |
… |
|
922 | 954 | /// |
923 | 955 | /// Construct a directed graph writer, which writes to the given |
924 | 956 | /// output file. |
925 | | GraphWriter(const std::string& fn, Graph& graph) |
| 957 | GraphWriter(const std::string& fn, const Graph& graph) |
926 | 958 | : _os(new std::ofstream(fn.c_str())), local_os(true), _graph(graph), |
927 | 959 | _skip_nodes(false), _skip_edges(false) {} |
928 | 960 | |
… |
… |
|
930 | 962 | /// |
931 | 963 | /// Construct a directed graph writer, which writes to the given |
932 | 964 | /// output file. |
933 | | GraphWriter(const char* fn, Graph& graph) |
| 965 | GraphWriter(const char* fn, const Graph& graph) |
934 | 966 | : _os(new std::ofstream(fn)), local_os(true), _graph(graph), |
935 | 967 | _skip_nodes(false), _skip_edges(false) {} |
936 | | |
937 | | /// \brief Copy constructor |
938 | | /// |
939 | | /// The copy constructor transfers all data from the other writer, |
940 | | /// therefore the copied writer will not be usable more. |
941 | | GraphWriter(GraphWriter& other) |
942 | | : _os(other._os), local_os(other.local_os), _graph(other._graph), |
943 | | _skip_nodes(other._skip_nodes), _skip_edges(other._skip_edges) { |
944 | | |
945 | | other._os = 0; |
946 | | other.local_os = false; |
947 | | |
948 | | _node_index.swap(other._node_index); |
949 | | _edge_index.swap(other._edge_index); |
950 | | |
951 | | _node_maps.swap(other._node_maps); |
952 | | _edge_maps.swap(other._edge_maps); |
953 | | _attributes.swap(other._attributes); |
954 | | |
955 | | _nodes_caption = other._nodes_caption; |
956 | | _edges_caption = other._edges_caption; |
957 | | _attributes_caption = other._attributes_caption; |
958 | | } |
959 | 968 | |
960 | 969 | /// \brief Destructor |
961 | 970 | ~GraphWriter() { |
… |
… |
|
978 | 987 | delete _os; |
979 | 988 | } |
980 | 989 | } |
| 990 | |
| 991 | private: |
981 | 992 | |
982 | | private: |
983 | | |
| 993 | friend GraphWriter<Graph> graphWriter<>(std::ostream& os, |
| 994 | const Graph& graph); |
| 995 | friend GraphWriter<Graph> graphWriter<>(const std::string& fn, |
| 996 | const Graph& graph); |
| 997 | friend GraphWriter<Graph> graphWriter<>(const char *fn, |
| 998 | const Graph& graph); |
| 999 | |
| 1000 | GraphWriter(GraphWriter& other) |
| 1001 | : _os(other._os), local_os(other.local_os), _graph(other._graph), |
| 1002 | _skip_nodes(other._skip_nodes), _skip_edges(other._skip_edges) { |
| 1003 | |
| 1004 | other._os = 0; |
| 1005 | other.local_os = false; |
| 1006 | |
| 1007 | _node_index.swap(other._node_index); |
| 1008 | _edge_index.swap(other._edge_index); |
| 1009 | |
| 1010 | _node_maps.swap(other._node_maps); |
| 1011 | _edge_maps.swap(other._edge_maps); |
| 1012 | _attributes.swap(other._attributes); |
| 1013 | |
| 1014 | _nodes_caption = other._nodes_caption; |
| 1015 | _edges_caption = other._edges_caption; |
| 1016 | _attributes_caption = other._attributes_caption; |
| 1017 | } |
| 1018 | |
984 | 1019 | GraphWriter& operator=(const GraphWriter&); |
985 | 1020 | |
986 | 1021 | public: |
… |
… |
|
1410 | 1445 | |
1411 | 1446 | /// \relates GraphWriter |
1412 | 1447 | template <typename Graph> |
1413 | | GraphWriter<Graph> graphWriter(std::ostream& os, Graph& graph) { |
| 1448 | GraphWriter<Graph> graphWriter(std::ostream& os, const Graph& graph) { |
1414 | 1449 | GraphWriter<Graph> tmp(os, graph); |
1415 | 1450 | return tmp; |
1416 | 1451 | } |
1417 | 1452 | |
1418 | 1453 | /// \relates GraphWriter |
1419 | 1454 | template <typename Graph> |
1420 | | GraphWriter<Graph> graphWriter(const std::string& fn, Graph& graph) { |
| 1455 | GraphWriter<Graph> graphWriter(const std::string& fn, const Graph& graph) { |
1421 | 1456 | GraphWriter<Graph> tmp(fn, graph); |
1422 | 1457 | return tmp; |
1423 | 1458 | } |
1424 | 1459 | |
1425 | 1460 | /// \relates GraphWriter |
1426 | 1461 | template <typename Graph> |
1427 | | GraphWriter<Graph> graphWriter(const char* fn, Graph& graph) { |
| 1462 | GraphWriter<Graph> graphWriter(const char* fn, const Graph& graph) { |
1428 | 1463 | GraphWriter<Graph> tmp(fn, graph); |
1429 | 1464 | return tmp; |
1430 | 1465 | } |