Browse Source

closes https://github.com/assimp/assimp/issues/904: add ai_strtof for
VS2012.

Kim Kulling 9 years ago
parent
commit
9b6de15b74
4 changed files with 90 additions and 3 deletions
  1. 4 3
      code/D3MFImporter.cpp
  2. 17 0
      code/StringUtils.h
  3. 1 0
      test/CMakeLists.txt
  4. 68 0
      test/unit/utStringUtils.cpp

+ 4 - 3
code/D3MFImporter.cpp

@@ -47,6 +47,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 #include <contrib/unzip/unzip.h>
 #include <contrib/unzip/unzip.h>
 #include "irrXMLWrapper.h"
 #include "irrXMLWrapper.h"
 #include "StringComparison.h"
 #include "StringComparison.h"
+#include "StringUtils.h"
 
 
 
 
 #include <string>
 #include <string>
@@ -224,9 +225,9 @@ private:
     aiVector3D ReadVertex()
     aiVector3D ReadVertex()
     {        
     {        
         aiVector3D vertex;
         aiVector3D vertex;
-        vertex.x = std::strtof(xmlReader->getAttributeValue(D3MF::XmlTag::x.c_str()), nullptr);
-        vertex.y = std::strtof(xmlReader->getAttributeValue(D3MF::XmlTag::y.c_str()), nullptr);
-        vertex.z = std::strtof(xmlReader->getAttributeValue(D3MF::XmlTag::z.c_str()), nullptr);        
+        vertex.x = ai_strtof(xmlReader->getAttributeValue(D3MF::XmlTag::x.c_str()), nullptr);
+        vertex.y = ai_strtof(xmlReader->getAttributeValue(D3MF::XmlTag::y.c_str()), nullptr);
+        vertex.z = ai_strtof>(xmlReader->getAttributeValue(D3MF::XmlTag::z.c_str()), nullptr);
 
 
         return vertex;
         return vertex;
     }
     }

+ 17 - 0
code/StringUtils.h

@@ -89,5 +89,22 @@ std::string to_string( T value ) {
     return os.str();
     return os.str();
 }
 }
 
 
+inline
+float ai_strtof( const char *begin, const char *end ) {
+    if ( nullptr == begin ) {
+        return 0.0f;
+    }
+    float val( 0.0f );
+    if ( nullptr == end ) {
+        val = static_cast< float >( ::atof( begin ) );
+    } else {
+        std::string::size_type len( end - begin );
+        std::string token( begin, len );
+        val = static_cast< float >( ::atof( token.c_str() ) );
+    }
+    
+    return val;
+}
+
 #endif // INCLUDED_AI_STRINGUTILS_H
 #endif // INCLUDED_AI_STRINGUTILS_H
 
 

+ 1 - 0
test/CMakeLists.txt

@@ -78,6 +78,7 @@ SET( TEST_SRCS
   unit/utRemoveRedundantMaterials.cpp
   unit/utRemoveRedundantMaterials.cpp
   unit/utScenePreprocessor.cpp
   unit/utScenePreprocessor.cpp
   unit/utSharedPPData.cpp
   unit/utSharedPPData.cpp
+  unit/utStringUtils.cpp
   unit/utSortByPType.cpp
   unit/utSortByPType.cpp
   unit/utSplitLargeMeshes.cpp
   unit/utSplitLargeMeshes.cpp
   unit/utTargetAnimation.cpp
   unit/utTargetAnimation.cpp

+ 68 - 0
test/unit/utStringUtils.cpp

@@ -0,0 +1,68 @@
+/*
+---------------------------------------------------------------------------
+Open Asset Import Library (assimp)
+---------------------------------------------------------------------------
+
+Copyright (c) 2006-2016, assimp team
+
+All rights reserved.
+
+Redistribution and use of this software in source and binary forms,
+with or without modification, are permitted provided that the following
+conditions are met:
+
+* Redistributions of source code must retain the above
+copyright notice, this list of conditions and the
+following disclaimer.
+
+* Redistributions in binary form must reproduce the above
+copyright notice, this list of conditions and the
+following disclaimer in the documentation and/or other
+materials provided with the distribution.
+
+* Neither the name of the assimp team, nor the names of its
+contributors may be used to endorse or promote products
+derived from this software without specific prior
+written permission of the assimp team.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+---------------------------------------------------------------------------
+*/
+#include "UnitTestPCH.h"
+#include "StringUtils.h"
+
+class utStringUtils : public ::testing::Test {
+};
+
+TEST_F( utStringUtils, to_string_Test ) {
+    std::string res = to_string( 1 );
+    EXPECT_EQ( res, "1" );
+
+    res = to_string( 1.0f );
+    EXPECT_EQ( res, "1" );
+}
+
+TEST_F( utStringUtils, ai_strtofTest ) {
+    float res = ai_strtof( nullptr, nullptr );
+    EXPECT_FLOAT_EQ( res, 0.0f );
+
+    std::string testStr1 = "200.0";
+    res = ai_strtof( testStr1.c_str(), nullptr );
+    EXPECT_FLOAT_EQ( res, 200.0f );
+
+    std::string testStr2 = "200.0 xxx";
+    const char *begin( testStr2.c_str() );
+    const char *end( begin + 6 );
+    res = ai_strtof( begin, end );
+    EXPECT_FLOAT_EQ( res, 200.0f );
+}