Просмотр исходного кода

2010-03-05 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net>

	Fixed the bug that util::itos(INT64_MIN) fails.
	* src/util.cc
	* src/util.h
	* test/UtilTest.cc
Tatsuhiro Tsujikawa 15 лет назад
Родитель
Сommit
7637fd76a2
4 измененных файлов с 39 добавлено и 16 удалено
  1. 7 0
      ChangeLog
  2. 23 0
      src/util.cc
  3. 1 14
      src/util.h
  4. 8 2
      test/UtilTest.cc

+ 7 - 0
ChangeLog

@@ -1,3 +1,10 @@
+2010-03-05  Tatsuhiro Tsujikawa  <t-tujikawa@users.sourceforge.net>
+
+	Fixed the bug that util::itos(INT64_MIN) fails.
+	* src/util.cc
+	* src/util.h
+	* test/UtilTest.cc
+
 2010-03-05  Tatsuhiro Tsujikawa  <t-tujikawa@users.sourceforge.net>
 
 	Fixed memory leak in SocketBuffer when _bufq is not empty when

+ 23 - 0
src/util.cc

@@ -139,6 +139,29 @@ std::pair<std::string, std::string> split(const std::string& src, const std::str
   return hp;
 }
 
+std::string itos(int64_t value, bool comma)
+{
+  bool flag = false;
+  std::string str;
+  if(value < 0) {
+    if(value == INT64_MIN) {
+      if(comma) {
+        str = "-9,223,372,036,854,775,808";
+      } else {
+        str = "-9223372036854775808";
+      }
+      return str;
+    }
+    flag = true;
+    value = -value;
+  }
+  str = uitos(value, comma);
+  if(flag) {
+    str.insert(str.begin(), '-');
+  }
+  return str;
+}
+
 int64_t difftv(struct timeval tv1, struct timeval tv2) {
   if((tv1.tv_sec < tv2.tv_sec) ||
      ((tv1.tv_sec == tv2.tv_sec) && (tv1.tv_usec < tv2.tv_usec))) {

+ 1 - 14
src/util.h

@@ -113,20 +113,7 @@ std::string uitos(T value, bool comma = false)
   return str;
 }
 
-template<typename T>
-std::string itos(T value, bool comma = false)
-{
-  bool flag = false;
-  if(value < 0) {
-    flag = true;
-    value = -value;
-  }
-  std::string str = uitos(value, comma);
-  if(flag) {
-    str.insert(str.begin(), '-');
-  }
-  return str;
-}
+std::string itos(int64_t value, bool comma = false);
 
 /**
  * Computes difference in micro-seconds between tv1 and tv2,

+ 8 - 2
test/UtilTest.cc

@@ -775,8 +775,14 @@ void UtilTest::testItos()
   }
   {
     int64_t i = INT64_MAX;
-    CPPUNIT_ASSERT_EQUAL(std::string("9,223,372,036,854,775,807"), util::itos(i, true));
-  }  
+    CPPUNIT_ASSERT_EQUAL(std::string("9,223,372,036,854,775,807"),
+                         util::itos(i, true));
+  }
+  {
+    int64_t i = INT64_MIN;
+    CPPUNIT_ASSERT_EQUAL(std::string("-9,223,372,036,854,775,808"),
+                         util::itos(i, true));
+  }
 }
 
 void UtilTest::testUitos()