Commit Graph

294 Commits

Author SHA1 Message Date
Mael Rouxel-Labbé 052cbc6bff Revert "Added boost::hash overloads for the other Surface_mesh index-based classes"
This reverts commit 13caf25037daff13072570bc7f54ea70c2f6f907.

Doesn't seem to actually be required...
2017-06-22 16:17:13 +02:00
Mael Rouxel-Labbé 358e438505 Fixed a mistake while rebasing 2017-06-22 16:17:13 +02:00
Mael Rouxel-Labbé 8b464899d7 Added boost::hash overloads for the other Surface_mesh index-based classes 2017-06-22 16:14:55 +02:00
Andreas Fabri f6f52e01b0 cleanup and fix of Simple_parameterization.cpp 2017-06-22 16:12:26 +02:00
Laurent Rineau 01fc5c3b33 Merge branch 'releases/CGAL-4.10-branch' 2017-06-16 11:45:45 +02:00
Laurent Rineau bececa63df Merge branch 'releases/CGAL-4.9-branch' into releases/CGAL-4.10-branch 2017-06-16 11:43:08 +02:00
Laurent Rineau 01504b06e6 Add missing headers 2017-06-08 09:49:40 +02:00
Andreas Fabri d6816a7368 Move Mesh_3 specific properties to Mesh_3 2017-05-31 16:08:26 +02:00
Andreas Fabri 4d27ea1cc5 Move selection properties to the Polyhedron demo directory as it is demo specific 2017-05-31 16:05:24 +02:00
Maxime Gimeno e379ad8524 Fix after rebase 2017-05-29 14:35:17 +02:00
Maxime Gimeno 360031a14a Restore the PMP_properties_Surface_mesh.h and remove the private copy constructor of Gwdwg to let the default one be used, as it does not allow memory. This allows Surface only meshing to work with surface_mesh. 2017-05-29 13:24:08 +02:00
Maxime Gimeno 1330777a31 Make property maps for PMP and Surface_mesh generic
Conflicts:
	Polyhedron/demo/Polyhedron/Plugins/PMP/Detect_sharp_edges_plugin.cpp
	Polyhedron/demo/Polyhedron/Scene_surface_mesh_item.h
2017-05-29 13:22:37 +02:00
Maxime Gimeno 880b6e21a2 Fixes and Clean-up.
- Move the new properties in a file in PMP and remove them from the namespace boost.
- Move the surface mesh properties from properties_Surface_mesh.h to Scene_surface_mesh_item.h
2017-05-29 13:20:39 +02:00
Maxime Gimeno 278c5b6154 Fix missing typename and template 2017-05-29 13:20:39 +02:00
Andreas Fabri b5212bd83b Make surface mesh simplification plugin work for Surface_mesh 2017-05-29 13:20:38 +02:00
Laurent Rineau 72cd1785cd Merge pull request #2086 from afabri/BGL-cgal_style_doc-GF
BGL:  doxygen doc for concepts
2017-05-29 11:16:40 +02:00
Laurent Rineau cc40bf46e4 Merge pull request #1899 from maxGimeno/Clean_up_Surface_mesh_doc-GF
Clean-up Surface_mesh doc
2017-05-11 16:05:46 +02:00
Andreas Fabri 86bc36abe1 Complete documentation 2017-04-28 11:45:16 +02:00
Andreas Fabri 8e5df1efe9 An isolated point IS a border point 2017-03-29 19:10:47 +02:00
Andreas Fabri a890b3f221 Fix #1949 2017-03-06 08:55:51 +01:00
Maxime Gimeno 3bc4308abb Remove useless doc. 2017-02-10 12:00:11 +01:00
Laurent Rineau f55950601f Merge pull request #1890 from lrineau/Surface_mesh-fix_Property_map-GF
Fix <CGAL/Surface_mesh/Properties.h> introduced by #1791
2017-02-08 17:32:35 +01:00
Laurent Rineau 13e420732c Merge pull request #1840 from afabri/BGL-reserve-GF
BGL: Add helper function reserve(G,nv,ne,nf)
2017-02-08 17:32:22 +01:00
Laurent Rineau 7b2a150e84 Fix <CGAL/Surface_mesh/Properties.h> and its uses
The PR #1791 introduced `CGAL::Point_set_3`, and factorized the
`Property_map` implementation of `Surface_mesh` into a new class
template `CGAL::Properties::Property_map<Key, T>`.

The backward compatibility was supposed to be ensured by the fact that
`Surface_mesh<Point>::Property_map<Key,T>` had
`Properties::Property_map<Key, T>` as base class. But that compatibility
was only partial, and there could be ambiguities in the calls to `get`
and `put` with those property maps.

This commit/PR renamed `Properties::Property_map` to
`Properties::Property_map_base`, and added a third parameter, used as
the `Derived` class in the CRTP used by `boost::put_get_helper`. That
way, the `get` and `put` functions are defined directory on the real
class `Surface_mesh::Property_map<Key, T>` and not on its base class.

The same has been modified in `CGAL::Point_set_3`.

That makes the use of `Property_base_base` and `Property_container` a
little trickier, but that removes several ugly non-portable hacks, like
the `reinterpret_cast` that were used to convert a pointer to base class
of the pmap to the pointer the real pmap. Now that is a lot cleaner.

I have verified that the documentation is not modified. Actually, the
PR #1791 did modify the documentation of `Surface_mesh` (see the member
method `add_property_map` for example), and this PR fixes the situation:
the documentation of `Surface_mesh` is put back to the version in
CGAL-4.9.
2017-02-08 14:33:18 +01:00
Sébastien Loriot 50510c05ea add include directive for license of all GPL header files
done using:
ack-grep "^GPL" */package_info/*/license.txt -l | awk -F "/" '{print $1}' > /tmp/gpl_packages
for i in `cat /tmp/gpl_packages | \
          grep -v Operations_on_polyhedra | \
          grep -v Algebraic_kernel_for_circles | \
          grep -v Algebraic_kernel_for_spheres | \
          grep -v Polyhedron_IO`;
do
  echo $i
  python Scripts/developer_scripts/add_license_in_pkg_header.py $i
done
python Scripts/developer_scripts/add_license_in_pkg_header.py Operations_on_polyhedra Polygon_mesh_processing
python Scripts/developer_scripts/add_license_in_pkg_header.py Algebraic_kernel_for_circles Circular_kernel_2
python Scripts/developer_scripts/add_license_in_pkg_header.py Algebraic_kernel_for_spheres Circular_kernel_3
python Scripts/developer_scripts/add_license_in_pkg_header.py Polyhedron_IO Polyhedron
2017-01-19 15:20:25 +01:00
Sébastien Loriot 6926578b15 add reserve to MutableFaceGraph 2017-01-18 18:19:25 +01:00
Simon Giraudot 1beb340550 Merge branch 'Point_set_3-GF-old' into Point_set_3-GF 2017-01-03 15:23:23 +01:00
Sébastien Loriot fe5e925367 Merge pull request #1701 from afabri/Convex_hull_3-FaceGraph-GF
Convex_hull_3: Switch to FaceGraph
2016-12-30 15:14:34 +01:00
Andreas Fabri 55c53d53f3 Surface_mesh: The get/put functions are not templated 2016-12-05 17:05:23 +01:00
Andreas Fabri d968e123ea Make indices work with Unique_hash_map 2016-11-22 12:26:26 +01:00
Simon Giraudot 22f0b2c1f8 Merge branch 'Point_set_3-GF-old' into Point_set_3-GF 2016-10-24 15:17:38 +02:00
Simon Giraudot a694c34ff2 Properties: fix types (use std::size_t everywhere it should be used) 2016-10-21 10:28:41 +02:00
Laurent Rineau 9865f19a4d Back-compatibility of Surface_mesh::Property_map 2016-10-21 10:28:40 +02:00
Simon Giraudot f80bbf517c Bugfix: creation of pmap should return false if pmap already exists 2016-10-21 10:28:40 +02:00
Simon Giraudot 7f4044bb2e Recover property values as strings + fix get to check type in addition of name 2016-10-21 10:28:39 +02:00
Simon Giraudot a1ef348e66 Revert unfortunate change in Surface_mesh 2016-10-21 10:28:39 +02:00
Simon Giraudot 1ff9ebf0e9 Return boolean instead of void to make sure property is removed 2016-10-21 10:28:39 +02:00
Simon Giraudot 1b37cbcb35 Add missing const 2016-10-21 10:28:39 +02:00
Simon Giraudot dc82631685 Update namespaces 2016-10-21 10:28:39 +02:00
Simon Giraudot 0cc14d6738 Add iterator and related methods begin() and end() 2016-10-21 10:28:38 +02:00
Simon Giraudot 1343ade651 Remove Surface_mesh as a friend class (useless) 2016-10-21 10:28:38 +02:00
Simon Giraudot 8e6dbf0e03 Reset Properties to initial state in Surface_mesh 2016-10-21 10:28:38 +02:00
Simon Giraudot a5bb805d31 Propagate namespace change in BGL 2016-10-21 10:28:38 +02:00
Simon Giraudot 6429dde647 Revert now useless modifications of Surface_mesh 2016-10-21 10:28:37 +02:00
Simon Giraudot 8e73580e3e Update change of namespace in Surface_mesh/IO.h 2016-10-21 10:28:37 +02:00
Simon Giraudot a4aaf392e6 Move properties out of Surface_mesh and update namespaces 2016-10-21 10:28:37 +02:00
Simon Giraudot de35c285b5 Update Properties.h with needed functions 2016-10-21 10:28:37 +02:00
Simon Giraudot 287d334051 Some changes in surface_mesh needed by point_set_3 2016-10-21 10:28:37 +02:00
Simon Giraudot 751b407895 Properties: fix types (use std::size_t everywhere it should be used) 2016-10-14 11:33:54 +02:00
Simon Giraudot 47a6e268a7 Add method to swap contents of 2 property containers 2016-10-11 09:08:48 +02:00
Simon Giraudot 62578b554c Update doc with latest review 2016-10-11 08:54:27 +02:00
Laurent Rineau 51f5697d3d Add missing #include 2016-09-30 15:23:14 +02:00
Andreas Fabri 40e9c6f735 Move specializations of graph_traits the packages that are concerned 2016-09-30 15:22:29 +02:00
Simon Giraudot 05d171c5b3 Bugfix: creation of pmap should return false if pmap already exists 2016-09-30 10:35:25 +02:00
Simon Giraudot bb78bbaa54 Revert "Add methods to get property values as strings"
This reverts commit 487d17f973.
2016-09-30 09:59:51 +02:00
Simon Giraudot fa1f2aab52 Recover property values as strings + fix get to check type in addition of name 2016-09-28 10:50:55 +02:00
Simon Giraudot 487d17f973 Add methods to get property values as strings 2016-09-27 15:37:41 +02:00
Simon Giraudot 0f3abe1ce6 Revert unfortunate change in Surface_mesh 2016-09-26 15:36:40 +02:00
Simon Giraudot a24834656c Return boolean instead of void to make sure property is removed 2016-09-14 17:53:19 +02:00
Simon Giraudot ba192cda54 Add missing const 2016-09-13 17:13:27 +02:00
Simon Giraudot 15915106b3 Update namespaces 2016-09-09 14:28:34 +02:00
Simon Giraudot 1e985f5ecd Merge branch 'Point_set_processing_3-Point_set_3-GF-old' into Point_set_processing_3-Point_set_3-GF 2016-09-08 12:58:25 +02:00
Sébastien Loriot ff1b240a37 replace assert by CGAL_assertion in CGAL code 2016-08-25 11:12:17 +02:00
Andreas Fabri bb6ac49dbb Make constructor SM_Edge_index(SM_Halfedge_index) explicit 2016-06-13 16:03:06 +02:00
Sebastien Loriot 1127725c11 Merge pull request #1013 from maxGimeno/Polyhedron_demo-OFF_with_color-GF
Polyhedron demo : OFF with colors
2016-05-23 11:28:19 +02:00
Sébastien Loriot 5b826d5a2b clean up 2016-05-23 11:26:04 +02:00
Sébastien Loriot 827c9cf2e1 Merge remote-tracking branch 'cgal/releases/CGAL-4.8-branch' 2016-05-23 11:14:59 +02:00
Andreas Fabri b5534be59a Cast constness of this away as the function Surface_mesh::properties() is const 2016-05-18 12:40:31 +02:00
Maxime Gimeno 26721fa626 add test for colored OFF
# Veuillez saisir le message de validation pour vos modifications. Les lignes
2016-05-12 17:11:28 +02:00
Maxime Gimeno 6761dcae8e Fix tellg/seekg errors 2016-05-12 17:11:28 +02:00
Maxime Gimeno c14c5b9129 Clean up 2016-05-12 17:11:27 +02:00
Maxime Gimeno f3de4dfe01 Clean up 2016-05-12 17:11:27 +02:00
Maxime Gimeno 128adc4c32 Addition of a color management of the not oriented OFF with colors 2016-05-12 17:11:26 +02:00
Maxime Gimeno 511f3f187f Code optimization and parser fix 2016-05-12 17:09:44 +02:00
Maxime Gimeno 3fdff7e831 Addition of the facet colors. 2016-05-12 17:09:44 +02:00
Maxime Gimeno f04a6f98ce Finished the management of the per-vertex color 2016-05-12 17:09:44 +02:00
Maxime Gimeno a1dbe23e7d Replaced color_index management by RGBcolor (float and int) management 2016-05-12 17:09:44 +02:00
Maxime Gimeno fe612feb9b Addition of a test colormap 2016-05-12 17:09:43 +02:00
Simon Giraudot b1cbf5279b Add iterator and related methods begin() and end() 2016-05-03 09:27:10 +02:00
Simon Giraudot bb43dc6cfc Remove Surface_mesh as a friend class (useless) 2016-05-03 08:19:49 +02:00
Simon Giraudot 1c0043f21f Reset Properties to initial state in Surface_mesh 2016-05-03 07:54:43 +02:00
Simon Giraudot a1c8ec9c3f Merge branch 'Polyhedron_demo-Enhance_point_set_properties-GF-old-old' into Polyhedron_demo-Enhance_point_set_properties-GF-old 2016-04-25 17:35:25 +02:00
Andreas Fabri eb90e8e3e1 Include consistently <CGAL/property_map.h> 2016-02-24 12:09:36 +01:00
Simon Giraudot ccb63c2afd Revert now useless modifications of Surface_mesh 2016-02-10 13:51:17 +01:00
Simon Giraudot d0430481a7 Update change of namespace in Surface_mesh/IO.h 2016-02-10 13:40:49 +01:00
Simon Giraudot 66c9b18012 WIP: use directly Properties instead of Surface_mesh in Point_set_3 2016-02-09 14:46:05 +01:00
Sébastien Loriot f5aae4e8cb add comments 2016-02-04 16:19:30 +01:00
Simon Giraudot 5f0793d1c1 Bugfix: add dummy iterator traits to SM_Halfedge_index 2016-02-03 15:21:15 +01:00
Simon Giraudot eb43dd0e2d Move properties out of Surface_mesh and update namespaces 2016-01-29 15:18:03 +01:00
Simon Giraudot 06b87f0a14 Update Properties.h with needed functions 2016-01-29 15:17:38 +01:00
Simon Giraudot 1eaadb00b7 Some changes in surface_mesh needed by point_set_3 2016-01-28 07:20:19 +01:00
Andreas Fabri 3ef9aea5eb fix indentation as it is really misleading 2016-01-21 09:24:02 +01:00
Andreas Fabri 7764bd3bdc Added Surface_mesh::swap(Vertex_index, Vertex_index) that also swaps properties 2016-01-20 14:17:39 +01:00
Sébastien Loriot 54ca52b538 Merge branch 'BGL-SurfaceMesh2SurfaceMesh-GF' into Polygon_mesh_processing-local_remeshing-GF 2015-11-05 19:25:00 +01:00
Laurent Rineau 7ddefbdcc8 Merge pull request #297 from afabri/CGAL-assert-GF
assert() should not be used in CGAL headers!
2015-09-07 10:58:20 +02:00
Jane Tournois ce54198aa7 Merge branch 'Polygon_mesh_processing-local_remeshing-GF-old' into Polygon_mesh_processing-local_remeshing-GF 2015-09-02 15:57:23 +02:00
Andreas Fabri 06bac198dc endl -> '\n' 2015-09-02 15:33:03 +02:00
Andreas Fabri 1e2ff1131e assert -> CGAL_assertion 2015-08-27 16:51:55 +02:00
Laurent Rineau 0fd6f2fa59 Merge pull request #288 from afabri/CGAL-add_hash-GF
No longer forward declare struct std:hash

Fixes issues #287 and #274.
2015-08-27 15:41:50 +02:00
Andreas Fabri bf975ead95 No longer forward declare struct std:hash 2015-08-23 14:30:54 +02:00
Philipp Möller 6d1d3f04ba Fix compilation errors for VS
Note that removing the "template" keyword may break compilation
for other compilers
2015-07-30 14:16:46 +02:00
Philipp Möller 0b5e682985 Clean up some includes 2015-07-30 14:16:26 +02:00
Philipp Möller 3533e77dfe Remove Boost.Fusion dependency
Boost.Fusion in 1.57 fails to compile on gcc 4.4 + std=c++0x (see
https://svn.boost.org/trac/boost/ticket/10190). Since we want support
for that platform, the fusion map is replaced by a specialized class
template Property_selector.
2015-07-30 14:16:12 +02:00
Laurent Rineau 08666dce25 Merge pull request #179 from afabri/CGAL-add_hash-GF
Add boost::hash and std::hash

https://cgal.geometryfactory.com/CGAL/Members/wiki/Features/Small_Features/hash

Conflicts:
	Installation/changes.html
2015-07-17 15:39:18 +02:00
Sébastien Loriot 5d2c892dbe Merge pull request #149 'lrineau/Polygon_mesh_processing-GF'
Add various functions to manipulate polygon meshes
2015-07-17 14:50:56 +02:00
Laurent Rineau 2a9b9330c3 Revert "Merge pull request #143 from bo0ts/Surface_mesh-gcc44_fixes-pmoeller"
This reverts commit 8cffc8be58, reversing
changes made to c1a0afd97a.

Philipp (@bo0ts) will open a new pull-request so solve the issue.
2015-07-14 18:29:43 +02:00
Sébastien Loriot c616df7196 Merge branch 'old/Polygon_mesh_processing-GF' into Polygon_mesh_processing-GF
Conflicts:
	Documentation/biblio/cgal_manual.bib
	Installation/changes.html
2015-07-13 08:16:59 +02:00
Andreas Fabri 2dea6db3bb Merge branch 'CGAL-add_hash-GF-old' into CGAL-add_hash-GF
Conflicts:
	Surface_mesh/include/CGAL/Surface_mesh/Surface_mesh.h
2015-07-06 10:51:23 +02:00
Andreas Fabri 20c1b1a1f6 Merge branch 'Polygon_mesh_processing-GF-old' into Polygon_mesh_processing-GF
Conflicts:
	BGL/include/CGAL/boost/graph/Euler_operations.h
	BGL/include/CGAL/boost/graph/iterator.h
	Documentation/doc/Documentation/Doxyfile.in
	Documentation/doc/Documentation/dependencies
	Polyhedron/demo/Polyhedron/Polyhedron_demo_point_inside_polyhedron_plugin.cpp
	Polyhedron/demo/Polyhedron/Scene_polygon_soup_item.cpp
	Polyhedron/demo/Polyhedron/Selection_widget.ui
2015-07-01 13:52:44 +02:00
Jane Tournois 2c6b6a9ee9 reintroduce template keyword
msvc seems to be ok with it
2015-07-01 13:04:36 +02:00
Jane Tournois 631a60ea85 fix compilation errors for visual studio
note that removing the "template" keyword may break compilation
for other compilers
2015-07-01 12:48:05 +02:00
Philipp Möller 0cda240dd1 Clean up some includes 2015-06-29 13:13:09 +02:00
Philipp Möller 1e62e6b197 Remove Boost.Fusion dependency
Boost.Fusion in 1.57 fails to compile on gcc 4.4 + std=c++0x (see
https://svn.boost.org/trac/boost/ticket/10190). Since we want support
for that platform, the fusion map is replaced by a specialized class
template Property_selector.
2015-06-29 13:12:51 +02:00
Andreas Fabri c48bf3a3e6 more tests; small fixes 2015-06-25 09:17:08 +02:00
Andreas Fabri 92a647b1af add example for unordered_set 2015-06-22 12:31:48 +02:00
Andreas Fabri b197a3402f do not document hash_value as it is an implementation detail 2015-06-22 12:16:46 +02:00
Andreas Fabri dadb129147 g++ needs a forward declaration for std::hash 2015-06-02 08:46:20 +02:00
Andreas Fabri b6850d35c0 #include <functional> and suppress struct/class warning for VC10 2015-06-01 10:42:52 +02:00
Andreas Fabri 425cdf0b0c derive from unary_function; Add #define switch to hash underlying pointer 2015-05-27 12:19:55 +02:00
Andreas Fabri 3491e73509 remove debug output 2015-05-27 11:29:58 +02:00
Laurent Rineau 2bfdee92c7 Merge pull request #67 from afabri/Surface_mesh-join-GF
Add join operation to Surface_mesh
2015-05-18 11:04:48 +02:00
Andreas Fabri 915d1e6fdb do not document an internal function 2015-04-27 17:53:04 +02:00
Andreas Fabri 18ee1199e7 replace -1 by a variable to avoid warning 2015-04-25 15:54:00 +02:00
Andreas Fabri 6dbdea0429 The results on this version with VC11 boost 1_55 are:
$ ./build/hm.exe data/iphi.off
3165798 items

Surface_mesh  std::map
BOOST_FOREACH boost::iterator_range r = vertices(g))
  0.53 sec.
BOOST_FOREACH CGAL::Iterator_range r = vertices(g))
  0.13 sec.
BOOST_FOREACH vertices(g))
  1.49 sec.
for vertices(g))
  0.18 sec.
v = 0 0 0  2004454762201200
2015-04-21 13:44:26 +02:00
Andreas Fabri e9766c0ffd slight change of Index_iterator::increment 2015-04-21 13:24:10 +02:00
Andreas Fabri 0c2a568d73 better coverage of the combinations of mesh and map classes 2015-04-20 10:40:03 +02:00
Sébastien Loriot d36593eb72 add missing const and remove debug output 2015-04-17 17:22:26 +02:00
Andreas Fabri 832208d815 simplifications 2015-04-17 15:49:21 +02:00
Andreas Fabri 205a594a77 add specializations of hash and add tests 2015-04-17 10:21:14 +02:00
Andreas Fabri 821ccc3373 move Face_index and add fake unordered set 2015-04-16 13:38:37 +02:00
Andreas Fabri 0a2e3f8a8b move Halfedge_index 2015-04-16 13:31:40 +02:00
Andreas Fabri 144e4772c1 move Vertex_index 2015-04-16 13:27:38 +02:00
Andreas Fabri a3a9a9c873 move Index out of the class and rename it to SM_Index 2015-04-16 13:23:38 +02:00
Andreas Fabri c2871c92e6 Move the Index class back into Suface_mesh; Add doc 2015-04-15 19:15:34 +02:00
Jane Tournois 4f93dc07b0 use add_face(vertex range) from euler operations in Surface_mesh 2015-04-10 11:29:29 +02:00
Andreas Fabri 962ef07812 Add hash_value for Compact_container, Inplace_list, Index 2015-03-12 16:21:56 +01:00
Andreas Fabri ae8f32511f improve doc 2015-02-03 14:26:43 +01:00
Andreas Fabri ec19e1ca12 improve doc 2015-02-03 14:19:09 +01:00
Andreas Fabri cdf00e7532 concatenate freelists in case the meshes have garbage 2015-02-03 12:51:09 +01:00
Andreas Fabri e57073baed transfer property from rhs if the property exists on lhs 2015-02-03 11:25:34 +01:00
Andreas Fabri d65c0a0add find corresponding property arrays 2015-02-03 10:42:13 +01:00
Andreas Fabri 095cb4b2dc deal also with invalid surface meshes 2015-02-02 16:33:10 +01:00
Andreas Fabri ca23f7b4e2 Add operator+=(Surface_mesh&, const Surface_mesh&) 2015-02-02 15:40:20 +01:00
Andreas Fabri 8e64f50a0b chmod -x and fixes of license headers 2015-01-07 18:38:45 +01:00
Andreas Fabri f85b635ce5 add missing typename 2015-01-06 09:31:18 +01:00
Andreas Fabri fea4eed94a less unsigned/signed warnings 2015-01-04 11:31:29 +01:00
Andreas Fabri 0140ab6479 do not compare with -1 directly 2015-01-01 19:36:33 +01:00
Andreas Fabri f631dc01d7 change unsigned int to boost::uint32_t 2014-12-31 12:51:55 +01:00
Andreas Fabri 471396d821 change Surface_mesh::size_type to unsigned int 2014-12-31 12:38:10 +01:00
Andreas Fabri 1e9f07711e %n in a scanf reads the number of characters read, and must be an int 2014-12-30 10:53:13 +01:00