The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
MANIFEST 13
META.json 039
META.yml 1818
Makefile.PL 5143
README 02
dcpp/DCPlusPlus.h 883
dcpp/MerkleTree.h 34
dcpp/stdinc.h 546
dcpp/typedefs.h 0111
lib/Net/DirectConnect/TigerHash.pm 24
patch/DCPlusPlus.h 2214
patch/HashValue.h 22
patch/stdinc.h 194
13 files changed (This is a version diff) 211293
@@ -7,6 +7,7 @@ dcpp/MerkleTree.h
 dcpp/stdinc.h
 dcpp/TigerHash.cpp
 dcpp/TigerHash.h
+dcpp/typedefs.h
 getpagesize.c
 lib/Net/DirectConnect/TigerHash.pm
 Makefile.PL
@@ -34,4 +35,5 @@ t/t-0-B37KMLIQJWLWKKD25PHO3ROKMCTALOUJP6U6EXA.tth
 t/t-3YFOLBEU4YZVNMMQ2AS3ORT2CKKT6CSQZXEJ5TQ.tth
 t/TigerHash.t
 TigerHash.xs
-META.yml                                 Module meta-data (added by MakeMaker)
+META.yml                                 Module YAML meta-data (added by MakeMaker)
+META.json                                Module JSON meta-data (added by MakeMaker)
@@ -0,0 +1,39 @@
+{
+   "abstract" : "Perl extension for calculating tiger hashes from files or strings",
+   "author" : [
+      "Charlie & <proler@gmail.com>"
+   ],
+   "dynamic_config" : 1,
+   "generated_by" : "ExtUtils::MakeMaker version 6.66, CPAN::Meta::Converter version 2.120921",
+   "license" : [
+      "unknown"
+   ],
+   "meta-spec" : {
+      "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec",
+      "version" : "2"
+   },
+   "name" : "Net-DirectConnect-TigerHash",
+   "no_index" : {
+      "directory" : [
+         "t",
+         "inc"
+      ]
+   },
+   "prereqs" : {
+      "build" : {
+         "requires" : {
+            "ExtUtils::MakeMaker" : "0"
+         }
+      },
+      "configure" : {
+         "requires" : {
+            "ExtUtils::MakeMaker" : "0"
+         }
+      },
+      "runtime" : {
+         "requires" : {}
+      }
+   },
+   "release_status" : "stable",
+   "version" : "0.08"
+}
@@ -1,21 +1,21 @@
---- #YAML:1.0
-name:               Net-DirectConnect-TigerHash
-version:            0.06
-abstract:           Perl extension for calculating tiger hashes from files or strings
+---
+abstract: 'Perl extension for calculating tiger hashes from files or strings'
 author:
-    - Charlie & <proler@gmail.com>
-license:            unknown
-distribution_type:  module
-configure_requires:
-    ExtUtils::MakeMaker:  0
+  - 'Charlie & <proler@gmail.com>'
 build_requires:
-    ExtUtils::MakeMaker:  0
-requires:  {}
-no_index:
-    directory:
-        - t
-        - inc
-generated_by:       ExtUtils::MakeMaker version 6.55_02
+  ExtUtils::MakeMaker: 0
+configure_requires:
+  ExtUtils::MakeMaker: 0
+dynamic_config: 1
+generated_by: 'ExtUtils::MakeMaker version 6.66, CPAN::Meta::Converter version 2.120921'
+license: unknown
 meta-spec:
-    url:      http://module-build.sourceforge.net/META-spec-v1.4.html
-    version:  1.4
+  url: http://module-build.sourceforge.net/META-spec-v1.4.html
+  version: 1.4
+name: Net-DirectConnect-TigerHash
+no_index:
+  directory:
+    - t
+    - inc
+requires: {}
+version: 0.08
@@ -1,49 +1,42 @@
 #!/usr/bin/perl
 use 5.006000;
 use ExtUtils::MakeMaker;
-
 #See lib/ExtUtils/MakeMaker.pm for details of how to influence
 #the contents of the Makefile that is written.
 %_ = (
-    NAME         => 'Net::DirectConnect::TigerHash',
-    VERSION_FROM => 'lib/Net/DirectConnect/TigerHash.pm',    # finds $VERSION
-      #PREREQ_PM    => {},                                      # e.g., Module::Name => 1.1
-    (
-        $] >= 5.005
-        ?    ## Add these new keywords supported since 5.005
-          (
-            ABSTRACT_FROM => 'lib/Net/DirectConnect/TigerHash.pm'
-            ,    # retrieve abstract from module
-            AUTHOR => 'Charlie & <proler@gmail.com>'
-          )
-        : ()
-    ),
-
-    #LIBS   => [''],                                               # e.g., '-lm'
-    DEFINE => '-I./dcpp/ -I../dcpp/',    # e.g., '-DHAVE_SOMETHING'
-                                         #Insert -I. if you add *.h files later:
-    INC    => '-I.',                     # e.g., '-I/usr/include/other'
-         #Un-comment this if you add C files to link with later:
-         #OBJECT            => '$(O_FILES)', # link all the C files too
-    'CC' => 'g++',
-    'LD' => '$(CC)',
+  NAME         => 'Net::DirectConnect::TigerHash',
+  VERSION_FROM => 'lib/Net/DirectConnect/TigerHash.pm',    # finds $VERSION
+       #PREREQ_PM    => {},                                      # e.g., Module::Name => 1.1
+  (
+    $] >= 5.005
+    ?    ## Add these new keywords supported since 5.005
+      (
+      ABSTRACT_FROM => 'lib/Net/DirectConnect/TigerHash.pm',    # retrieve abstract from module
+      AUTHOR        => 'Charlie & <proler@gmail.com>'
+      )
+    : ()
+  ),
+  #LIBS   => [''],                                               # e.g., '-lm'
+  DEFINE => '-I./dcpp/ -I../dcpp/',                             # e.g., '-DHAVE_SOMETHING'
+                                                                #Insert -I. if you add *.h files later:
+  INC    => '-I.',                                              # e.g., '-I/usr/include/other'
+                                                                #Un-comment this if you add C files to link with later:
+                                                                #OBJECT            => '$(O_FILES)', # link all the C files too
+  'CC'   => 'g++',
+  'LD'   => '$(CC)',
 );
 $_{dist} = {
-    PREOP =>
-"pod2text $_{VERSION_FROM} | tee README >\$(DISTVNAME)/README; chmod -R u=rwX,go=rX . ;",
-    COMPRESS => 'gzip -9v',
-    SUFFIX   => '.gz',
+  PREOP    => "pod2text $_{VERSION_FROM} | tee README >\$(DISTVNAME)/README; chmod -R u=rwX,go=rX . ;",
+  COMPRESS => 'gzip -9v',
+  SUFFIX   => '.gz',
 };
 WriteMakefile(%_);
 
 sub MY::postamble {
-    my @dcppfiles =
-      qw(DCPlusPlus.h Encoder.cpp Encoder.h HashValue.h MerkleTree.h TigerHash.cpp TigerHash.h stdinc.h);
-    my $dcppfiles = join ' ', map { './eiskaltdcpp/dcpp/' . $_ } @dcppfiles;
-
-    #config.h DCPlusPlus.cpp  stdinc.h
-
-    qq{
+  my @dcppfiles = qw(DCPlusPlus.h Encoder.cpp Encoder.h HashValue.h MerkleTree.h TigerHash.cpp TigerHash.h stdinc.h typedefs.h);
+  my $dcppfiles = join ' ', map { './eiskaltdcpp/dcpp/' . $_ } @dcppfiles;
+  #config.h DCPlusPlus.cpp  stdinc.h
+  qq{
 #docs: README
 
 #README: $_{VERSION_FROM}
@@ -54,9 +47,9 @@ fullclean: distclean veryclean
     
 release: test fullclean manifest metafile dist
 } . (
-        $^O eq 'MSWin32'
-        ? ()
-        : qq{
+    $^O eq 'MSWin32'
+    ? ()
+    : qq{
 download:
 	[ -d eiskaltdcpp ] || git clone git://github.com/negativ/eiskaltdcpp.git
 	cp $dcppfiles ./dcpp
@@ -64,26 +57,25 @@ download:
 patchmake:
 	mkdir -p patch
 } . (
-            join '',
-            map {
-                qq{	diff -u ./eiskaltdcpp/dcpp/$_ dcpp/$_ > patch/$_ || true
+      join '',
+      map {
+        qq{	diff -u ./eiskaltdcpp/dcpp/$_ dcpp/$_ > patch/$_ || true
 }
-              } @dcppfiles
-          )
-          . qq{
+        } @dcppfiles
+      )
+      . qq{
 
 patchapply:
 } . (
-            join '',
-            map {
-                qq{	patch -N dcpp/$_ < patch/$_ || true
+      join '',
+      map {
+        qq{	patch -N dcpp/$_ < patch/$_ || true
 }
-              } @dcppfiles
-          )
-          . qq{
+        } @dcppfiles
+      )
+      . qq{
 update: download patchapply
 
 }
-
-    );
+  );
 }
@@ -28,6 +28,8 @@ SEE ALSO
      http://code.google.com/p/eiskaltdc/
 
 BUGS
+     cant compile with gcc <=3
+
 AUTHOR
     Oleg Alexeenkov, <pro@cpan.org>
 
@@ -35,6 +35,7 @@ inline void CDECL debugTrace(const char* format, ...)
     vprintf(format, args);
     va_end(args);
 }
+*/
 
 #define dcdebug debugTrace
 #ifdef _MSC_VER
@@ -61,47 +62,6 @@ _CrtDbgBreak(); } } while(false)
 #undef max
 #endif
 
-namespace dcpp {
-
-typedef std::vector<string> StringList;
-typedef StringList::iterator StringIter;
-typedef StringList::const_iterator StringIterC;
-
-typedef std::pair<string, string> StringPair;
-typedef std::vector<StringPair> StringPairList;
-typedef StringPairList::iterator StringPairIter;
-
-typedef std::tr1::unordered_map<string, string> StringMap;
-typedef StringMap::iterator StringMapIter;
-
-typedef std::tr1::unordered_set<string> StringSet;
-typedef StringSet::iterator StringSetIter;
-
-typedef std::vector<wstring> WStringList;
-typedef WStringList::iterator WStringIter;
-typedef WStringList::const_iterator WStringIterC;
-
-typedef std::pair<wstring, wstring> WStringPair;
-typedef std::vector<WStringPair> WStringPairList;
-typedef WStringPairList::iterator WStringPairIter;
-
-
-typedef std::vector<uint8_t> ByteVector;
-/*
-template<typename T>
-boost::basic_format<T> dcpp_fmt(const T* t) {
-    boost::basic_format<T> fmt;
-    fmt.exceptions(boost::io::no_error_bits);
-    fmt.parse(t);
-    return fmt;
-}
-
-template<typename T>
-boost::basic_format<T> dcpp_fmt(const std::basic_string<T>& t) {
-    return dcpp_fmt(t.c_str());
-}
-*/
-
 #if defined(_MSC_VER) || defined(__MINGW32__)
 #define _LL(x) x##ll
 #define _ULL(x) x##ull
@@ -131,57 +91,12 @@ boost::basic_format<T> dcpp_fmt(const std::basic_string<T>& t) {
 # define PATH_SEPARATOR_STR "/"
 
 #endif
-
-
-typedef unordered_map<wstring, wstring> WStringMap;
-typedef WStringMap::iterator WStringMapIter;
-
-#ifdef UNICODE
-
-typedef wstring tstring;
-typedef WStringList TStringList;
-typedef WStringIter TStringIter;
-typedef WStringIterC TStringIterC;
-
-typedef WStringPair TStringPair;
-typedef WStringPairIter TStringPairIter;
-typedef WStringPairList TStringPairList;
-
-typedef WStringMap TStringMap;
-typedef WStringMapIter TStringMapIter;
-
-#else
-
-typedef string tstring;
-typedef StringList TStringList;
-typedef StringIter TStringIter;
-typedef StringIterC TStringIterC;
-
-typedef StringPair TStringPair;
-typedef StringPairIter TStringPairIter;
-typedef StringPairList TStringPairList;
-
-typedef StringMap TStringMap;
-typedef StringMapIter TStringMapIter;
-
-#endif
-
 /*
+namespace dcpp {
 extern void startup(void (*f)(void*, const string&), void* p);
 extern void shutdown();
-*/
-
-#ifdef BUILDING_DCPP
-#define PACKAGE "libeiskaltdcpp"
-#define LOCALEDIR LOCALE_DIR
-#define _(String) dgettext(PACKAGE, String)
-#define gettext_noop(String) String
-#define N_(String) gettext_noop (String)
-#define F_(String) dcpp_fmt(dgettext(PACKAGE, String))
-#define FN_(String1,String2, N) dcpp_fmt(dngettext(PACKAGE, String1, String2, N))
-
-#endif
 
 } // namespace dcpp
+*/
 
 #endif // !defined(DC_PLUS_PLUS_H)
@@ -16,9 +16,10 @@
  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
  */
 
-#if !defined(MERKLE_TREE_H)
-#define MERKLE_TREE_H
+#ifndef DCPLUSPLUS_DCPP_MERKLE_TREE_H
+#define DCPLUSPLUS_DCPP_MERKLE_TREE_H
 
+#include "typedefs.h"
 #include "TigerHash.h"
 #include "Encoder.h"
 #include "HashValue.h"
@@ -231,4 +232,4 @@ private:
 
 } // namespace dcpp
 
-#endif // !defined(MERKLE_TREE_H)
+#endif // DCPLUSPLUS_DCPP_MERKLE_TREE_H
@@ -35,6 +35,7 @@
 
 //msc, mingw
 #if defined(_MSC_VER) || ( defined(__WIN32__) && !defined(__CYGWIN__))
+#if __GNUC__ > 3
 typedef signed __int8 int8_t;
 typedef signed __int16 int16_t;
 typedef signed __int32 int32_t;
@@ -45,6 +46,7 @@ typedef unsigned __int16 uint16_t;
 typedef unsigned __int32 uint32_t;
 typedef unsigned __int64 uint64_t;
 #endif
+#endif
 
 
 #ifdef _MSC_VER
@@ -67,11 +69,21 @@ typedef unsigned __int64 uint64_t;
 #endif // _MSC_VER
 
 #ifdef _WIN32
-//# define _WIN32_WINNT 0x0501
+
+#ifndef _WIN32_WINNT
+# define _WIN32_WINNT 0x0501
+#endif
+
 # define _WIN32_IE      0x0501
-//# define WINVER 0x501
 
-//#define STRICT
+#ifndef WINVER
+# define WINVER 0x501
+#endif
+
+#ifndef STRICT
+#define STRICT
+#endif
+
 #define WIN32_LEAN_AND_MEAN
 
 #include <winsock2.h>
@@ -127,19 +139,48 @@ typedef unsigned __int64 uint64_t;
 
 #include <unordered_map>
 #include <unordered_set>
+#define MAPTYPE unordered_map
+#define SETTYPE unordered_set
+
+#elif __GNUC__ <= 3
+
+//#include <ext/hash_map>
+//#include <ext/hash_set>
+#include <map>
+#include <set>
+#define MAPTYPE map
+#define SETTYPE set
+
+#elif __cplusplus >= 201103L
+
+#include <unordered_set>
+#include <unordered_map>
+#define MAPTYPE unordered_map
+#define SETTYPE unordered_set
+
 
 #elif defined(__GLIBCPP__) || defined(__GLIBCXX__)  // Using GNU C++ library?
 
 #include <tr1/unordered_set>
 #include <tr1/unordered_map>
+#define MAPTYPE tr1::unordered_map
+#define SETTYPE tr1::unordered_set
+
 
 #else
-#error "Unknown STL, please configure accordingly"
+
+#include <unordered_set>
+#include <unordered_map>
+#define MAPTYPE unordered_map
+#define SETTYPE unordered_set
+
 #endif
 
 namespace dcpp {
 using namespace std;
-using namespace std::tr1;
+#if __GNUC__ > 3
+//using namespace std::tr1;
+#endif
 }
 
 #endif // !defined(STDINC_H)
@@ -0,0 +1,111 @@
+/*
+ * Copyright (C) 2001-2011 Jacek Sieka, arnetheduck on gmail point com
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifndef DCPLUSPLUS_DCPP_TYPEDEFS_H_
+#define DCPLUSPLUS_DCPP_TYPEDEFS_H_
+/*
+#include "forward.h"
+*/
+
+#include <stdint.h>
+
+#include <string>
+//#include <tr1/unordered_map>
+//#include <tr1/unordered_set>
+
+namespace dcpp {
+
+using std::pair;
+using std::string;
+//using std::tr1::unordered_map;
+//using std::tr1::unordered_set;
+using std::vector;
+using std::wstring;
+
+typedef vector<string> StringList;
+typedef StringList::iterator StringIter;
+typedef StringList::const_iterator StringIterC;
+
+typedef pair<string, string> StringPair;
+typedef vector<StringPair> StringPairList;
+typedef StringPairList::iterator StringPairIter;
+
+typedef MAPTYPE<string, string> StringMap;
+typedef StringMap::iterator StringMapIter;
+
+typedef SETTYPE<string> StringSet;
+typedef StringSet::iterator StringSetIter;
+
+typedef vector<wstring> WStringList;
+typedef WStringList::iterator WStringIter;
+typedef WStringList::const_iterator WStringIterC;
+
+typedef pair<wstring, wstring> WStringPair;
+typedef vector<WStringPair> WStringPairList;
+typedef WStringPairList::iterator WStringPairIter;
+
+typedef MAPTYPE<wstring, wstring> WStringMap;
+typedef WStringMap::iterator WStringMapIter;
+
+typedef vector<uint8_t> ByteVector;
+
+#ifdef UNICODE
+
+typedef wstring tstring;
+typedef WStringList TStringList;
+typedef WStringIter TStringIter;
+typedef WStringIterC TStringIterC;
+
+typedef WStringPair TStringPair;
+typedef WStringPairIter TStringPairIter;
+typedef WStringPairList TStringPairList;
+
+typedef WStringMap TStringMap;
+typedef WStringMapIter TStringMapIter;
+
+#else
+
+typedef string tstring;
+typedef StringList TStringList;
+typedef StringIter TStringIter;
+typedef StringIterC TStringIterC;
+
+typedef StringPair TStringPair;
+typedef StringPairIter TStringPairIter;
+typedef StringPairList TStringPairList;
+
+typedef StringMap TStringMap;
+typedef StringMapIter TStringMapIter;
+
+#endif
+
+/*
+typedef vector<DownloadPtr> DownloadList;
+typedef vector<FavoriteHubEntryPtr> FavoriteHubEntryList;
+typedef vector<HintedUser> HintedUserList;
+typedef vector<HubEntry> HubEntryList;
+typedef vector<OnlineUserPtr> OnlineUserList;
+typedef vector<SearchResultPtr> SearchResultList;
+typedef vector<UploadPtr> UploadList;
+typedef vector<UserPtr> UserList;
+typedef vector<UserConnectionPtr> UserConnectionList;
+typedef vector<uint16_t> PartsInfo;
+*/
+}
+
+#endif /* TYPEDEFS_H_ */
@@ -1,6 +1,6 @@
-#$Id: TigerHash.pm 756 2011-03-08 18:47:54Z pro $ $URL: svn://svn.setun.net/dcppp/trunk/TigerHash/lib/Net/DirectConnect/TigerHash.pm $
+#$Id: TigerHash.pm 1000 2014-05-07 10:17:31Z pro $ $URL: svn://svn.setun.net/dcppp/trunk/TigerHash/lib/Net/DirectConnect/TigerHash.pm $
 package Net::DirectConnect::TigerHash;
-our $VERSION = '0.06';# . '_' . ( split( ' ', '$Revision: 756 $' ) )[1];
+our $VERSION = '0.08';# . '_' . ( split( ' ', '$Revision: 1000 $' ) )[1];
 use 5.006001;
 use strict;
 use warnings;
@@ -50,6 +50,8 @@ None by default.
 
 =head1 BUGS
 
+ cant compile with gcc <=3
+
 =head1 AUTHOR
 
 Oleg Alexeenkov, E<lt>pro@cpan.orgE<gt>
@@ -1,32 +1,24 @@
---- ./eiskaltdcpp/dcpp/DCPlusPlus.h	2010-11-22 15:13:05.850172400 +0300
-+++ dcpp/DCPlusPlus.h	2010-11-22 15:18:50.196603600 +0300
-@@ -99,8 +99,9 @@
- typedef std::vector<WStringPair> WStringPairList;
- typedef WStringPairList::iterator WStringPairIter;
- 
--typedef std::vector<uint8_t> ByteVector;
- 
-+typedef std::vector<uint8_t> ByteVector;
-+/*
- template<typename T>
- boost::basic_format<T> dcpp_fmt(const T* t) {
-     boost::basic_format<T> fmt;
-@@ -113,6 +114,7 @@
- boost::basic_format<T> dcpp_fmt(const std::basic_string<T>& t) {
-     return dcpp_fmt(t.c_str());
+--- ./eiskaltdcpp/dcpp/DCPlusPlus.h	2011-06-27 23:47:40.000000000 +0400
++++ dcpp/DCPlusPlus.h	2011-06-28 00:46:15.000000000 +0400
+@@ -35,6 +35,7 @@
+     vprintf(format, args);
+     va_end(args);
  }
 +*/
  
- #if defined(_MSC_VER) || defined(__MINGW32__)
- #define _LL(x) x##ll
-@@ -178,8 +180,10 @@
+ #define dcdebug debugTrace
+ #ifdef _MSC_VER
+@@ -90,11 +91,12 @@
+ # define PATH_SEPARATOR_STR "/"
  
  #endif
- 
+-
 +/*
+ namespace dcpp {
  extern void startup(void (*f)(void*, const string&), void* p);
  extern void shutdown();
+ 
+ } // namespace dcpp
 +*/
  
- #ifdef BUILDING_DCPP
- #define PACKAGE "libeiskaltdcpp"
+ #endif // !defined(DC_PLUS_PLUS_H)
@@ -1,5 +1,5 @@
---- ./eiskaltdcpp/dcpp/HashValue.h	2010-11-22 15:13:05.895176900 +0300
-+++ dcpp/HashValue.h	2010-11-22 15:19:57.960379300 +0300
+--- ./eiskaltdcpp/dcpp/HashValue.h	2011-02-28 18:00:41.000000000 +0300
++++ dcpp/HashValue.h	2011-06-27 23:54:52.000000000 +0400
 @@ -19,13 +19,13 @@
  #ifndef DCPLUSPLUS_DCPP_HASH_VALUE_H
  #define DCPLUSPLUS_DCPP_HASH_VALUE_H
@@ -1,5 +1,5 @@
---- ./eiskaltdcpp/dcpp/stdinc.h	2010-11-22 15:13:06.040191400 +0300
-+++ dcpp/stdinc.h	2010-11-22 15:37:35.545127200 +0300
+--- ./eiskaltdcpp/dcpp/stdinc.h	2011-06-27 23:47:40.000000000 +0400
++++ dcpp/stdinc.h	2011-06-27 23:54:52.000000000 +0400
 @@ -33,14 +33,8 @@
  #define BZ_NO_STDIO 1
  #endif
@@ -33,22 +33,7 @@
  
  # ifndef CDECL
  #  define CDECL _cdecl
-@@ -64,11 +67,11 @@
- #endif // _MSC_VER
- 
- #ifdef _WIN32
--# define _WIN32_WINNT 0x0501
-+//# define _WIN32_WINNT 0x0501
- # define _WIN32_IE      0x0501
--# define WINVER 0x501
-+//# define WINVER 0x501
- 
--#define STRICT
-+//#define STRICT
- #define WIN32_LEAN_AND_MEAN
- 
- #include <winsock2.h>
-@@ -77,7 +80,7 @@
+@@ -87,7 +90,7 @@
  #include <mmsystem.h>
  
  #include <tchar.h>
@@ -57,7 +42,7 @@
  
  #else
  #include <unistd.h>
-@@ -110,11 +113,13 @@
+@@ -122,11 +125,13 @@
  #include <memory>
  #include <numeric>
  #include <limits>