{"action":"created","comment":{"url":"https://api.github.com/repos/DGtal-team/DGtal/pulls/comments/233345861","pull_request_review_id":174735637,"id":233345861,"node_id":"MDI0OlB1bGxSZXF1ZXN0UmV2aWV3Q29tbWVudDIzMzM0NTg2MQ==","diff_hunk":"@@ -0,0 +1,341 @@\n+/**\n+ *  This program is free software: you can redistribute it and/or modify\n+ *  it under the terms of the GNU Lesser General Public License as\n+ *  published by the Free Software Foundation, either version 3 of the\n+ *  License, or  (at your option) any later version.\n+ *\n+ *  This program is distributed in the hope that it will be useful,\n+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of\n+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n+ *  GNU General Public License for more details.\n+ *\n+ *  You should have received a copy of the GNU General Public License\n+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.\n+ *\n+ **/\n+\n+#pragma once\n+\n+/**\n+ * @file\n+ * @author Roland Denis (\\c denis@math.univ-lyon1.fr )\n+ * CNRS, Institut Camille Jordan (UMR 5208), Université Lyon 1, France\n+ *\n+ * @date 2018/07/09\n+ *\n+ * This file is part of the DGtal library.\n+ */\n+\n+#if defined(FunctorConstImage_RECURSES)\n+#error Recursive header files inclusion detected in FunctorConstImage.h\n+#else // defined(FunctorConstImage_RECURSES)\n+/** Prevents recursive inclusion of headers. */\n+#define FunctorConstImage_RECURSES\n+\n+#if !defined FunctorConstImage_h\n+/** Prevents repeated inclusion of headers. */\n+#define FunctorConstImage_h\n+\n+//////////////////////////////////////////////////////////////////////////////\n+// Inclusions\n+#include <iostream>\n+#include <type_traits>\n+#include <utility>\n+#include <iterator>\n+\n+#include <boost/iterator/transform_iterator.hpp>\n+#include <boost/concept/assert.hpp>\n+\n+#include \"DGtal/kernel/domains/CDomain.h\"\n+#include \"DGtal/base/FunctorHolder.h\"\n+//////////////////////////////////////////////////////////////////////////////\n+\n+namespace DGtal\n+{\n+namespace functors\n+{\n+\n+/**\n+ * @brief Transform a point-dependent (and possibly domain-dependent) functor into a constant image.\n+ *\n+ * @tparam TDomain  Domain type.\n+ * @tparam TValue   Value type returned by the functor.\n+ * @tparam TFunctor Type of the functor.\n+ *\n+ * The functor must accept a point, and eventually a domain, and return\n+ *    a value whose type is \\a Value.\n+ *\n+ * @warning This class is not meant to be directly constructed by the user.\n+ * As illustrated below, use instead the makeFunctorConstImage helper that\n+ * will choose the more appropriate storage type for the functor depending\n+ * on the given callable object.\n+ *\n+ * A typical usage would be:\n+ * @snippet exampleFunctorConstImage.cpp example1\n+ * resulting in:\n+ * \\image html FunctorConstImage_example1.png \"Image generated from a point-dependent lambda.\"\n+ * \\image latex FunctorConstImage_example1.png \"Image generated from a point-dependent lambda.\" width=5cm\n+ *\n+ * In you want to use a function instead of a functor or lambda, consider\n+ * wrapping it into a lambda to avoid a performance penalty due to the fact\n+ * that a pointer to a function cannot be inlined:\n+@code\n+auto image = DGtal::makeFunctorConstImage(\n+    domain,\n+    [] (Point const& pt) { return my_function(pt); }\n+);\n+@endcode\n+ *\n+ * This example is illustrated in @ref moduleImages_functorconstimage\n+ * and you can find more informations about how to use this class appropriately\n+ * in the module about @ref moduleFunctors .\n+ *\n+ * @see makeFunctorConstImage, FunctorHolder, @ref moduleFunctors\n+ *\n+ * @see exampleFunctorConstImage.cpp\n+ *\n+ */\n+template <\n+  typename TDomain,\n+  typename TValue,\n+  typename TFunctor\n+>\n+class FunctorConstImage\n+{\n+  BOOST_CONCEPT_ASSERT(( DGtal::concepts::CDomain<TDomain> ));\n+\n+  // ----------------------- Interface --------------------------------------\n+public:\n+\n+  // DGtal types\n+  using Self      = FunctorConstImage<TDomain, TValue, TFunctor>;\n+  using Domain    = TDomain;\n+  using Point     = typename Domain::Point;\n+  using Vector    = typename Domain::Vector;\n+  using Integer   = typename Domain::Integer;\n+  using Size      = typename Domain::Size;\n+  using Dimension = typename Domain::Dimension;\n+  using Vertex    = Point;\n+  using Value     = TValue;\n+  using Functor   = TFunctor;\n+\n+  using ConstIterator = boost::transform_iterator< std::reference_wrapper<const Self>, typename Domain::ConstIterator >;\n+  using ConstReverseIterator = std::reverse_iterator< ConstIterator >;\n+  class ConstRange;\n+\n+  BOOST_STATIC_CONSTANT( Dimension, dimension = Domain::Space::dimension );\n+\n+  // ------------------------- Private Datas --------------------------------\n+  // Private members moved to the beginning of the class because of\n+  //  the SFINAE trick in the operator() methods.\n+private:\n+  Domain  myDomain;   ///< The image domain.\n+  Functor myFunctor;  ///< The functor that generates the image.\n+\n+  // ----------------------- Standard services ------------------------------\n+public:\n+\n+  /** @brief Constructor\n+   * @param aDomain   The domain of the image.\n+   * @param aFunctor  The functor taking point as parameter.\n+   */\n+  template < class TGivenFunctor >\n+  explicit FunctorConstImage( Domain const& aDomain, TGivenFunctor && aFunctor )\n+    : myDomain( aDomain )\n+    , myFunctor( std::forward<TGivenFunctor>(aFunctor) )\n+  {\n+  }\n+\n+  // ----------------------- Interface --------------------------------------\n+public:\n+\n+  /// @brief Returns the associated domain.\n+  inline\n+  Domain const& domain() const\n+    {\n+      return myDomain;\n+    }\n+\n+  //@{\n+\n+  /** @brief Evaluates the functor at the given point.\n+   * @tparam  TPoint  point type (auto-deduced).\n+   * @param   aPoint  the point.\n+   * @return the value at \\a aPoint.\n+   *\n+   * @note There are two overloads of this operator, automatically dispatched depending on the arity of the functor.\n+   */\n+  template <typename TPoint> // Needed template parameter to enable SFINAE trick\n+  inline\n+  auto operator() ( TPoint const& aPoint ) const\n+      -> decltype( myFunctor( aPoint ) ) // Using SFINAE to enable this overload for unary functor\n+    {\n+      ASSERT_MSG(\n+          myDomain.isInside(aPoint),\n+          \"The point is outside the domain.\"\n+      );\n+      return myFunctor( aPoint );\n+    }\n+\n+  template <typename TPoint> // Needed template parameter to enable SFINAE trick\n+  inline\n+  auto operator() ( TPoint const& aPoint ) const\n+      -> decltype( myFunctor( aPoint, myDomain ) ) // Using SFINAE to enable this overload for binary functor\n+    {\n+      ASSERT_MSG(\n+          myDomain.isInside(aPoint),\n+          \"The point is outside the domain.\"\n+      );\n+      return myFunctor( aPoint, myDomain );\n+    }\n+\n+  //@}\n+\n+  /** @brief Returns a constant range over this image.\n+   */\n+  inline\n+  ConstRange constRange() const\n+    {\n+      return ConstRange( *this );\n+    }\n+\n+  /** @brief Writes/Displays the object on an output stream.\n+   * @param out the output stream where the object is written.\n+   */\n+  inline\n+  void selfDisplay ( std::ostream & out ) const\n+    {\n+      out << \"[FunctorConstImage] holding a \" << myFunctor << \" on domain \" << myDomain;\n+    }\n+\n+  /** @brief Checks the validity/consistency of the object.\n+   * @return 'true' if the object is valid, 'false' otherwise.\n+   */\n+  inline constexpr\n+  bool isValid() const\n+    {\n+      return true;\n+    }\n+\n+public:\n+  /// Constant range on a @ref FunctorConstImage\n+  class ConstRange\n+    {\n+  public:\n+      ConstRange( Self const& aFunctorConstImage )\n+        : myFunctorConstImage( aFunctorConstImage )\n+      {}\n+\n+      using ConstIterator = typename Self::ConstIterator;\n+      using ConstReverseIterator = typename Self::ConstReverseIterator;\n+      using Point = typename Self::Point;\n+\n+      inline ConstIterator begin()  const { return { myFunctorConstImage.myDomain.begin(), myFunctorConstImage }; }\n+      inline ConstIterator begin( Point const& aPoint ) const { return { myFunctorConstImage.myDomain.begin(aPoint), myFunctorConstImage }; }\n+      inline ConstIterator end()    const { return { myFunctorConstImage.myDomain.end(), myFunctorConstImage }; }\n+\n+      inline ConstReverseIterator rbegin()  const { return ConstReverseIterator( end() ); }\n+      inline ConstReverseIterator rbegin( Point const& aPoint ) const { return ConstReverseIterator( ++begin(aPoint) ); }\n+      inline ConstReverseIterator rend()    const { return ConstReverseIterator( begin() ); }\n+\n+  private:\n+      Self const& myFunctorConstImage;\n+    }; // End of class ConstRange\n+}; // End of class FunctorConstImage\n+\n+/** @brief Overloads 'operator<<' for displaying objects of class @ref FunctorConstImage.\n+ *\n+ * @param out the output stream where the object is written.\n+ * @param object the object of class @ref FunctorConstImage to write.\n+ * @return the output stream after the writing.\n+ */\n+template <typename TDomain, typename TValue, typename TFunctor>\n+std::ostream&\n+operator<< ( std::ostream & out, const FunctorConstImage<TDomain, TValue, TFunctor> & object )\n+{\n+  object.selfDisplay(out);\n+  return out;\n+}\n+\n+/** @brief FunctorConstImage construction helper with specification of the return type.\n+ *\n+ * @tparam  TValue    The image value type.\n+ * @tparam  TDomain   The domain type (auto-deduced).\n+ * @tparam  TFunctor  The functor type (auto-deduced).\n+ * @param   aDomain   The image domain.\n+ * @param   aFunctor  The functor that generates the image.\n+ * @return an instance of the appropriate FunctorConstImage type.\n+ *\n+ * @see FunctorConstImage\n+ */\n+template <\n+  typename TValue,\n+  typename TDomain,\n+  typename TFunctor\n+>\n+inline auto\n+makeFunctorConstImage( TDomain const& aDomain, TFunctor && aFunctor )\n+    -> FunctorConstImage<TDomain, TValue, decltype(holdFunctor(std::forward<TFunctor>(aFunctor)))>\n+  {\n+    return FunctorConstImage<TDomain, TValue, decltype(holdFunctor(std::forward<TFunctor>(aFunctor)))>{ aDomain, holdFunctor(std::forward<TFunctor>(aFunctor)) };\n+  }\n+\n+//@{\n+\n+/** @brief FunctorConstImage construction helper with auto-deduction of the return type.\n+ *\n+ * @tparam  TDomain   The domain type (auto-deduced).\n+ * @tparam  TFunctor  The functor type (auto-deduced).\n+ * @param   aDomain   The image domain.\n+ * @param   aFunctor  The functor that generates the image.\n+ * @return an instance of the appropriate FunctorConstImage type.\n+ *\n+ * @see FunctorConstImage and @ref moduleImages for more informations.\n+ */\n+template <\n+  typename TDomain,\n+  typename TFunctor\n+>\n+inline auto\n+makeFunctorConstImage( TDomain const& aDomain, TFunctor && aFunctor )\n+    -> FunctorConstImage<\n+          TDomain,\n+          typename std::decay<decltype(aFunctor(std::declval<typename TDomain::Point>()))>::type,\n+          decltype(holdFunctor(std::forward<TFunctor>(aFunctor)))\n+        >\n+  {\n+    return FunctorConstImage<\n+        TDomain,\n+        typename std::decay<decltype(aFunctor(std::declval<typename TDomain::Point>()))>::type,\n+        decltype(holdFunctor(std::forward<TFunctor>(aFunctor)))\n+      >{ aDomain, holdFunctor(std::forward<TFunctor>(aFunctor)) };\n+  }\n+","path":"src/DGtal/images/FunctorConstImage.h","position":313,"original_position":313,"commit_id":"e710734572e7c27607afaf9e7f761862d3dc3821","original_commit_id":"f4db2fa39d2adef0e6e5770ede5673840c1b9913","user":{"login":"rolanddenis","id":10435058,"node_id":"MDQ6VXNlcjEwNDM1MDU4","avatar_url":"https://avatars2.githubusercontent.com/u/10435058?v=4","gravatar_id":"","url":"https://api.github.com/users/rolanddenis","html_url":"https://github.com/rolanddenis","followers_url":"https://api.github.com/users/rolanddenis/followers","following_url":"https://api.github.com/users/rolanddenis/following{/other_user}","gists_url":"https://api.github.com/users/rolanddenis/gists{/gist_id}","starred_url":"https://api.github.com/users/rolanddenis/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/rolanddenis/subscriptions","organizations_url":"https://api.github.com/users/rolanddenis/orgs","repos_url":"https://api.github.com/users/rolanddenis/repos","events_url":"https://api.github.com/users/rolanddenis/events{/privacy}","received_events_url":"https://api.github.com/users/rolanddenis/received_events","type":"User","site_admin":false},"body":"It works at least with methods but here, I only see one entry for this function ... I will duplicate the doc :wink: ","created_at":"2018-11-14T08:10:34Z","updated_at":"2018-11-14T08:10:35Z","html_url":"https://github.com/DGtal-team/DGtal/pull/1332#discussion_r233345861","pull_request_url":"https://api.github.com/repos/DGtal-team/DGtal/pulls/1332","author_association":"MEMBER","_links":{"self":{"href":"https://api.github.com/repos/DGtal-team/DGtal/pulls/comments/233345861"},"html":{"href":"https://github.com/DGtal-team/DGtal/pull/1332#discussion_r233345861"},"pull_request":{"href":"https://api.github.com/repos/DGtal-team/DGtal/pulls/1332"}},"in_reply_to_id":230049457},"pull_request":{"url":"https://api.github.com/repos/DGtal-team/DGtal/pulls/1332","id":200435886,"node_id":"MDExOlB1bGxSZXF1ZXN0MjAwNDM1ODg2","html_url":"https://github.com/DGtal-team/DGtal/pull/1332","diff_url":"https://github.com/DGtal-team/DGtal/pull/1332.diff","patch_url":"https://github.com/DGtal-team/DGtal/pull/1332.patch","issue_url":"https://api.github.com/repos/DGtal-team/DGtal/issues/1332","number":1332,"state":"open","locked":false,"title":"Generic functor holder and constant image from functor.","user":{"login":"rolanddenis","id":10435058,"node_id":"MDQ6VXNlcjEwNDM1MDU4","avatar_url":"https://avatars2.githubusercontent.com/u/10435058?v=4","gravatar_id":"","url":"https://api.github.com/users/rolanddenis","html_url":"https://github.com/rolanddenis","followers_url":"https://api.github.com/users/rolanddenis/followers","following_url":"https://api.github.com/users/rolanddenis/following{/other_user}","gists_url":"https://api.github.com/users/rolanddenis/gists{/gist_id}","starred_url":"https://api.github.com/users/rolanddenis/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/rolanddenis/subscriptions","organizations_url":"https://api.github.com/users/rolanddenis/orgs","repos_url":"https://api.github.com/users/rolanddenis/repos","events_url":"https://api.github.com/users/rolanddenis/events{/privacy}","received_events_url":"https://api.github.com/users/rolanddenis/received_events","type":"User","site_admin":false},"body":"# PR Description\r\n\r\nThis PR adds:\r\n- **FunctorHolder**: hold any callable object (function, functor, lambda, ...) as a C(Unary)Functor model without relying on `std::function`\r\n- **FunctorConstImage**: Transform a point-dependant functor into a constant image.\r\n- **PointFunctorHolder**: hold any callable object, that accept a point, as a `CPointFunctor` model\r\n- a module page about functions, functors and lambdas in DGtal.\r\n\r\n# Checklist\r\n\r\n- [x] Unit-test of your feature with [Catch](http://dgtal.org/doc/stable/moduleCatch.html).\r\n- [x] Doxygen documentation of the code completed (classes, methods, types, members...)\r\n- [x] Documentation module page added or updated.\r\n- [x] New entry in the [ChangeLog.md](https://github.com/DGtal-team/DGtal/blob/master/ChangeLog.md) added.\r\n- [x] No warning raised in Debug ```cmake``` mode (otherwise, Travis C.I. will fail).\r\n- [x] All continuous integration tests pass (Travis & appveyor)\r\n- [x] Example file\r\n- [x] Module page about passing function as parameter\r\n","created_at":"2018-07-10T15:26:57Z","updated_at":"2018-11-14T08:10:35Z","closed_at":null,"merged_at":null,"merge_commit_sha":"ae2518c400a503200a005ac80fb13c1715f97771","assignee":{"login":"dcoeurjo","id":700165,"node_id":"MDQ6VXNlcjcwMDE2NQ==","avatar_url":"https://avatars3.githubusercontent.com/u/700165?v=4","gravatar_id":"","url":"https://api.github.com/users/dcoeurjo","html_url":"https://github.com/dcoeurjo","followers_url":"https://api.github.com/users/dcoeurjo/followers","following_url":"https://api.github.com/users/dcoeurjo/following{/other_user}","gists_url":"https://api.github.com/users/dcoeurjo/gists{/gist_id}","starred_url":"https://api.github.com/users/dcoeurjo/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/dcoeurjo/subscriptions","organizations_url":"https://api.github.com/users/dcoeurjo/orgs","repos_url":"https://api.github.com/users/dcoeurjo/repos","events_url":"https://api.github.com/users/dcoeurjo/events{/privacy}","received_events_url":"https://api.github.com/users/dcoeurjo/received_events","type":"User","site_admin":false},"assignees":[{"login":"dcoeurjo","id":700165,"node_id":"MDQ6VXNlcjcwMDE2NQ==","avatar_url":"https://avatars3.githubusercontent.com/u/700165?v=4","gravatar_id":"","url":"https://api.github.com/users/dcoeurjo","html_url":"https://github.com/dcoeurjo","followers_url":"https://api.github.com/users/dcoeurjo/followers","following_url":"https://api.github.com/users/dcoeurjo/following{/other_user}","gists_url":"https://api.github.com/users/dcoeurjo/gists{/gist_id}","starred_url":"https://api.github.com/users/dcoeurjo/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/dcoeurjo/subscriptions","organizations_url":"https://api.github.com/users/dcoeurjo/orgs","repos_url":"https://api.github.com/users/dcoeurjo/repos","events_url":"https://api.github.com/users/dcoeurjo/events{/privacy}","received_events_url":"https://api.github.com/users/dcoeurjo/received_events","type":"User","site_admin":false},{"login":"JacquesOlivierLachaud","id":793707,"node_id":"MDQ6VXNlcjc5MzcwNw==","avatar_url":"https://avatars0.githubusercontent.com/u/793707?v=4","gravatar_id":"","url":"https://api.github.com/users/JacquesOlivierLachaud","html_url":"https://github.com/JacquesOlivierLachaud","followers_url":"https://api.github.com/users/JacquesOlivierLachaud/followers","following_url":"https://api.github.com/users/JacquesOlivierLachaud/following{/other_user}","gists_url":"https://api.github.com/users/JacquesOlivierLachaud/gists{/gist_id}","starred_url":"https://api.github.com/users/JacquesOlivierLachaud/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/JacquesOlivierLachaud/subscriptions","organizations_url":"https://api.github.com/users/JacquesOlivierLachaud/orgs","repos_url":"https://api.github.com/users/JacquesOlivierLachaud/repos","events_url":"https://api.github.com/users/JacquesOlivierLachaud/events{/privacy}","received_events_url":"https://api.github.com/users/JacquesOlivierLachaud/received_events","type":"User","site_admin":false}],"requested_reviewers":[],"requested_teams":[],"labels":[{"id":146750,"node_id":"MDU6TGFiZWwxNDY3NTA=","url":"https://api.github.com/repos/DGtal-team/DGtal/labels/Base","name":"Base","color":"111111","default":false},{"id":145408,"node_id":"MDU6TGFiZWwxNDU0MDg=","url":"https://api.github.com/repos/DGtal-team/DGtal/labels/Documentation","name":"Documentation","color":"e102d8","default":false},{"id":147428,"node_id":"MDU6TGFiZWwxNDc0Mjg=","url":"https://api.github.com/repos/DGtal-team/DGtal/labels/Image","name":"Image","color":"02e10c","default":false},{"id":105405,"node_id":"MDU6TGFiZWwxMDU0MDU=","url":"https://api.github.com/repos/DGtal-team/DGtal/labels/Kernel","name":"Kernel","color":"e10c02","default":false},{"id":180300329,"node_id":"MDU6TGFiZWwxODAzMDAzMjk=","url":"https://api.github.com/repos/DGtal-team/DGtal/labels/waiting%20author%20feedbacks","name":"waiting author feedbacks","color":"eb6420","default":false}],"milestone":{"url":"https://api.github.com/repos/DGtal-team/DGtal/milestones/6","html_url":"https://github.com/DGtal-team/DGtal/milestone/6","labels_url":"https://api.github.com/repos/DGtal-team/DGtal/milestones/6/labels","id":232409,"node_id":"MDk6TWlsZXN0b25lMjMyNDA5","number":6,"title":"1.0","description":"","creator":{"login":"dcoeurjo","id":700165,"node_id":"MDQ6VXNlcjcwMDE2NQ==","avatar_url":"https://avatars3.githubusercontent.com/u/700165?v=4","gravatar_id":"","url":"https://api.github.com/users/dcoeurjo","html_url":"https://github.com/dcoeurjo","followers_url":"https://api.github.com/users/dcoeurjo/followers","following_url":"https://api.github.com/users/dcoeurjo/following{/other_user}","gists_url":"https://api.github.com/users/dcoeurjo/gists{/gist_id}","starred_url":"https://api.github.com/users/dcoeurjo/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/dcoeurjo/subscriptions","organizations_url":"https://api.github.com/users/dcoeurjo/orgs","repos_url":"https://api.github.com/users/dcoeurjo/repos","events_url":"https://api.github.com/users/dcoeurjo/events{/privacy}","received_events_url":"https://api.github.com/users/dcoeurjo/received_events","type":"User","site_admin":false},"open_issues":24,"closed_issues":19,"state":"open","created_at":"2012-12-19T09:20:29Z","updated_at":"2018-11-04T20:51:22Z","due_on":null,"closed_at":null},"commits_url":"https://api.github.com/repos/DGtal-team/DGtal/pulls/1332/commits","review_comments_url":"https://api.github.com/repos/DGtal-team/DGtal/pulls/1332/comments","review_comment_url":"https://api.github.com/repos/DGtal-team/DGtal/pulls/comments{/number}","comments_url":"https://api.github.com/repos/DGtal-team/DGtal/issues/1332/comments","statuses_url":"https://api.github.com/repos/DGtal-team/DGtal/statuses/e710734572e7c27607afaf9e7f761862d3dc3821","head":{"label":"rolanddenis:dev_functor","ref":"dev_functor","sha":"e710734572e7c27607afaf9e7f761862d3dc3821","user":{"login":"rolanddenis","id":10435058,"node_id":"MDQ6VXNlcjEwNDM1MDU4","avatar_url":"https://avatars2.githubusercontent.com/u/10435058?v=4","gravatar_id":"","url":"https://api.github.com/users/rolanddenis","html_url":"https://github.com/rolanddenis","followers_url":"https://api.github.com/users/rolanddenis/followers","following_url":"https://api.github.com/users/rolanddenis/following{/other_user}","gists_url":"https://api.github.com/users/rolanddenis/gists{/gist_id}","starred_url":"https://api.github.com/users/rolanddenis/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/rolanddenis/subscriptions","organizations_url":"https://api.github.com/users/rolanddenis/orgs","repos_url":"https://api.github.com/users/rolanddenis/repos","events_url":"https://api.github.com/users/rolanddenis/events{/privacy}","received_events_url":"https://api.github.com/users/rolanddenis/received_events","type":"User","site_admin":false},"repo":{"id":30013981,"node_id":"MDEwOlJlcG9zaXRvcnkzMDAxMzk4MQ==","name":"DGtal","full_name":"rolanddenis/DGtal","private":false,"owner":{"login":"rolanddenis","id":10435058,"node_id":"MDQ6VXNlcjEwNDM1MDU4","avatar_url":"https://avatars2.githubusercontent.com/u/10435058?v=4","gravatar_id":"","url":"https://api.github.com/users/rolanddenis","html_url":"https://github.com/rolanddenis","followers_url":"https://api.github.com/users/rolanddenis/followers","following_url":"https://api.github.com/users/rolanddenis/following{/other_user}","gists_url":"https://api.github.com/users/rolanddenis/gists{/gist_id}","starred_url":"https://api.github.com/users/rolanddenis/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/rolanddenis/subscriptions","organizations_url":"https://api.github.com/users/rolanddenis/orgs","repos_url":"https://api.github.com/users/rolanddenis/repos","events_url":"https://api.github.com/users/rolanddenis/events{/privacy}","received_events_url":"https://api.github.com/users/rolanddenis/received_events","type":"User","site_admin":false},"html_url":"https://github.com/rolanddenis/DGtal","description":"Digital Geometry Tools and Algorithm Library","fork":true,"url":"https://api.github.com/repos/rolanddenis/DGtal","forks_url":"https://api.github.com/repos/rolanddenis/DGtal/forks","keys_url":"https://api.github.com/repos/rolanddenis/DGtal/keys{/key_id}","collaborators_url":"https://api.github.com/repos/rolanddenis/DGtal/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/rolanddenis/DGtal/teams","hooks_url":"https://api.github.com/repos/rolanddenis/DGtal/hooks","issue_events_url":"https://api.github.com/repos/rolanddenis/DGtal/issues/events{/number}","events_url":"https://api.github.com/repos/rolanddenis/DGtal/events","assignees_url":"https://api.github.com/repos/rolanddenis/DGtal/assignees{/user}","branches_url":"https://api.github.com/repos/rolanddenis/DGtal/branches{/branch}","tags_url":"https://api.github.com/repos/rolanddenis/DGtal/tags","blobs_url":"https://api.github.com/repos/rolanddenis/DGtal/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/rolanddenis/DGtal/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/rolanddenis/DGtal/git/refs{/sha}","trees_url":"https://api.github.com/repos/rolanddenis/DGtal/git/trees{/sha}","statuses_url":"https://api.github.com/repos/rolanddenis/DGtal/statuses/{sha}","languages_url":"https://api.github.com/repos/rolanddenis/DGtal/languages","stargazers_url":"https://api.github.com/repos/rolanddenis/DGtal/stargazers","contributors_url":"https://api.github.com/repos/rolanddenis/DGtal/contributors","subscribers_url":"https://api.github.com/repos/rolanddenis/DGtal/subscribers","subscription_url":"https://api.github.com/repos/rolanddenis/DGtal/subscription","commits_url":"https://api.github.com/repos/rolanddenis/DGtal/commits{/sha}","git_commits_url":"https://api.github.com/repos/rolanddenis/DGtal/git/commits{/sha}","comments_url":"https://api.github.com/repos/rolanddenis/DGtal/comments{/number}","issue_comment_url":"https://api.github.com/repos/rolanddenis/DGtal/issues/comments{/number}","contents_url":"https://api.github.com/repos/rolanddenis/DGtal/contents/{+path}","compare_url":"https://api.github.com/repos/rolanddenis/DGtal/compare/{base}...{head}","merges_url":"https://api.github.com/repos/rolanddenis/DGtal/merges","archive_url":"https://api.github.com/repos/rolanddenis/DGtal/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/rolanddenis/DGtal/downloads","issues_url":"https://api.github.com/repos/rolanddenis/DGtal/issues{/number}","pulls_url":"https://api.github.com/repos/rolanddenis/DGtal/pulls{/number}","milestones_url":"https://api.github.com/repos/rolanddenis/DGtal/milestones{/number}","notifications_url":"https://api.github.com/repos/rolanddenis/DGtal/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/rolanddenis/DGtal/labels{/name}","releases_url":"https://api.github.com/repos/rolanddenis/DGtal/releases{/id}","deployments_url":"https://api.github.com/repos/rolanddenis/DGtal/deployments","created_at":"2015-01-29T09:51:01Z","updated_at":"2018-09-21T07:20:21Z","pushed_at":"2018-11-09T09:49:46Z","git_url":"git://github.com/rolanddenis/DGtal.git","ssh_url":"git@github.com:rolanddenis/DGtal.git","clone_url":"https://github.com/rolanddenis/DGtal.git","svn_url":"https://github.com/rolanddenis/DGtal","homepage":"http://dgtal.org","size":166019,"stargazers_count":0,"watchers_count":0,"language":"C++","has_issues":false,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"archived":false,"open_issues_count":0,"license":{"key":"lgpl-3.0","name":"GNU Lesser General Public License v3.0","spdx_id":"LGPL-3.0","url":"https://api.github.com/licenses/lgpl-3.0","node_id":"MDc6TGljZW5zZTEy"},"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"}},"base":{"label":"DGtal-team:master","ref":"master","sha":"f879fc4f45a10df44d6bcdd1c2a5d8cc6563949f","user":{"login":"DGtal-team","id":1013900,"node_id":"MDEyOk9yZ2FuaXphdGlvbjEwMTM5MDA=","avatar_url":"https://avatars0.githubusercontent.com/u/1013900?v=4","gravatar_id":"","url":"https://api.github.com/users/DGtal-team","html_url":"https://github.com/DGtal-team","followers_url":"https://api.github.com/users/DGtal-team/followers","following_url":"https://api.github.com/users/DGtal-team/following{/other_user}","gists_url":"https://api.github.com/users/DGtal-team/gists{/gist_id}","starred_url":"https://api.github.com/users/DGtal-team/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/DGtal-team/subscriptions","organizations_url":"https://api.github.com/users/DGtal-team/orgs","repos_url":"https://api.github.com/users/DGtal-team/repos","events_url":"https://api.github.com/users/DGtal-team/events{/privacy}","received_events_url":"https://api.github.com/users/DGtal-team/received_events","type":"Organization","site_admin":false},"repo":{"id":1709095,"node_id":"MDEwOlJlcG9zaXRvcnkxNzA5MDk1","name":"DGtal","full_name":"DGtal-team/DGtal","private":false,"owner":{"login":"DGtal-team","id":1013900,"node_id":"MDEyOk9yZ2FuaXphdGlvbjEwMTM5MDA=","avatar_url":"https://avatars0.githubusercontent.com/u/1013900?v=4","gravatar_id":"","url":"https://api.github.com/users/DGtal-team","html_url":"https://github.com/DGtal-team","followers_url":"https://api.github.com/users/DGtal-team/followers","following_url":"https://api.github.com/users/DGtal-team/following{/other_user}","gists_url":"https://api.github.com/users/DGtal-team/gists{/gist_id}","starred_url":"https://api.github.com/users/DGtal-team/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/DGtal-team/subscriptions","organizations_url":"https://api.github.com/users/DGtal-team/orgs","repos_url":"https://api.github.com/users/DGtal-team/repos","events_url":"https://api.github.com/users/DGtal-team/events{/privacy}","received_events_url":"https://api.github.com/users/DGtal-team/received_events","type":"Organization","site_admin":false},"html_url":"https://github.com/DGtal-team/DGtal","description":"Digital Geometry Tools and Algorithm Library","fork":false,"url":"https://api.github.com/repos/DGtal-team/DGtal","forks_url":"https://api.github.com/repos/DGtal-team/DGtal/forks","keys_url":"https://api.github.com/repos/DGtal-team/DGtal/keys{/key_id}","collaborators_url":"https://api.github.com/repos/DGtal-team/DGtal/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/DGtal-team/DGtal/teams","hooks_url":"https://api.github.com/repos/DGtal-team/DGtal/hooks","issue_events_url":"https://api.github.com/repos/DGtal-team/DGtal/issues/events{/number}","events_url":"https://api.github.com/repos/DGtal-team/DGtal/events","assignees_url":"https://api.github.com/repos/DGtal-team/DGtal/assignees{/user}","branches_url":"https://api.github.com/repos/DGtal-team/DGtal/branches{/branch}","tags_url":"https://api.github.com/repos/DGtal-team/DGtal/tags","blobs_url":"https://api.github.com/repos/DGtal-team/DGtal/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/DGtal-team/DGtal/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/DGtal-team/DGtal/git/refs{/sha}","trees_url":"https://api.github.com/repos/DGtal-team/DGtal/git/trees{/sha}","statuses_url":"https://api.github.com/repos/DGtal-team/DGtal/statuses/{sha}","languages_url":"https://api.github.com/repos/DGtal-team/DGtal/languages","stargazers_url":"https://api.github.com/repos/DGtal-team/DGtal/stargazers","contributors_url":"https://api.github.com/repos/DGtal-team/DGtal/contributors","subscribers_url":"https://api.github.com/repos/DGtal-team/DGtal/subscribers","subscription_url":"https://api.github.com/repos/DGtal-team/DGtal/subscription","commits_url":"https://api.github.com/repos/DGtal-team/DGtal/commits{/sha}","git_commits_url":"https://api.github.com/repos/DGtal-team/DGtal/git/commits{/sha}","comments_url":"https://api.github.com/repos/DGtal-team/DGtal/comments{/number}","issue_comment_url":"https://api.github.com/repos/DGtal-team/DGtal/issues/comments{/number}","contents_url":"https://api.github.com/repos/DGtal-team/DGtal/contents/{+path}","compare_url":"https://api.github.com/repos/DGtal-team/DGtal/compare/{base}...{head}","merges_url":"https://api.github.com/repos/DGtal-team/DGtal/merges","archive_url":"https://api.github.com/repos/DGtal-team/DGtal/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/DGtal-team/DGtal/downloads","issues_url":"https://api.github.com/repos/DGtal-team/DGtal/issues{/number}","pulls_url":"https://api.github.com/repos/DGtal-team/DGtal/pulls{/number}","milestones_url":"https://api.github.com/repos/DGtal-team/DGtal/milestones{/number}","notifications_url":"https://api.github.com/repos/DGtal-team/DGtal/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/DGtal-team/DGtal/labels{/name}","releases_url":"https://api.github.com/repos/DGtal-team/DGtal/releases{/id}","deployments_url":"https://api.github.com/repos/DGtal-team/DGtal/deployments","created_at":"2011-05-06T00:20:52Z","updated_at":"2018-11-06T22:10:05Z","pushed_at":"2018-11-13T11:04:22Z","git_url":"git://github.com/DGtal-team/DGtal.git","ssh_url":"git@github.com:DGtal-team/DGtal.git","clone_url":"https://github.com/DGtal-team/DGtal.git","svn_url":"https://github.com/DGtal-team/DGtal","homepage":"http://dgtal.org","size":165813,"stargazers_count":109,"watchers_count":109,"language":"C++","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":61,"mirror_url":null,"archived":false,"open_issues_count":49,"license":{"key":"lgpl-3.0","name":"GNU Lesser General Public License v3.0","spdx_id":"LGPL-3.0","url":"https://api.github.com/licenses/lgpl-3.0","node_id":"MDc6TGljZW5zZTEy"},"forks":61,"open_issues":49,"watchers":109,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/DGtal-team/DGtal/pulls/1332"},"html":{"href":"https://github.com/DGtal-team/DGtal/pull/1332"},"issue":{"href":"https://api.github.com/repos/DGtal-team/DGtal/issues/1332"},"comments":{"href":"https://api.github.com/repos/DGtal-team/DGtal/issues/1332/comments"},"review_comments":{"href":"https://api.github.com/repos/DGtal-team/DGtal/pulls/1332/comments"},"review_comment":{"href":"https://api.github.com/repos/DGtal-team/DGtal/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/DGtal-team/DGtal/pulls/1332/commits"},"statuses":{"href":"https://api.github.com/repos/DGtal-team/DGtal/statuses/e710734572e7c27607afaf9e7f761862d3dc3821"}},"author_association":"MEMBER"}}
{"actor":{"display_login":"rolanddenis"}}