Add minimal support for Array<string>, and fix Tensor<string>

This commit is contained in:
Gael Guennebaud 2016-07-25 14:25:56 +02:00
parent 4184a3e544
commit 9908020d36
4 changed files with 54 additions and 5 deletions

View File

@ -234,6 +234,27 @@ struct NumTraits<Array<Scalar, Rows, Cols, Options, MaxRows, MaxCols> >
static inline RealScalar dummy_precision() { return NumTraits<RealScalar>::dummy_precision(); }
};
template<> struct NumTraits<std::string>
: GenericNumTraits<std::string>
{
enum {
RequireInitialization = 1,
ReadCost = HugeCost,
AddCost = HugeCost,
MulCost = HugeCost
};
static inline int digits10() { return 0; }
private:
static inline std::string epsilon();
static inline std::string dummy_precision();
static inline std::string lowest();
static inline std::string highest();
static inline std::string infinity();
static inline std::string quiet_NaN();
};
} // end namespace Eigen
#endif // EIGEN_NUMTRAITS_H

View File

@ -260,6 +260,7 @@ ei_add_test(ctorleak)
ei_add_test(mpl2only)
ei_add_test(inplace_decomposition)
ei_add_test(half_float)
ei_add_test(array_of_string)
add_executable(bug1213 bug1213.cpp bug1213_main.cpp)

32
test/array_of_string.cpp Normal file
View File

@ -0,0 +1,32 @@
// This file is part of Eigen, a lightweight C++ template library
// for linear algebra.
//
// Copyright (C) 2016 Gael Guennebaud <gael.guennebaud@inria.fr>
//
// This Source Code Form is subject to the terms of the Mozilla
// Public License v. 2.0. If a copy of the MPL was not distributed
// with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
#include "main.h"
void test_array_of_string()
{
typedef Array<std::string,1,Dynamic> ArrayXs;
ArrayXs a1(3), a2(3), a3(3), a3ref(3);
a1 << "one", "two", "three";
a2 << "1", "2", "3";
a3ref << "one (1)", "two (2)", "three (3)";
std::stringstream s1;
s1 << a1;
VERIFY_IS_EQUAL(s1.str(), std::string(" one two three"));
a3 = a1 + std::string(" (") + a2 + std::string(")");
VERIFY((a3==a3ref).all());
a3 = a1;
a3 += std::string(" (") + a2 + std::string(")");
VERIFY((a3==a3ref).all());
a1.swap(a3);
VERIFY((a1==a3ref).all());
VERIFY((a3!=a3ref).all());
}

View File

@ -13,11 +13,6 @@
namespace Eigen {
namespace internal {
template<>
struct significant_decimals_impl<std::string>
: significant_decimals_default_impl<std::string, true>
{};
// Print the tensor as a 2d matrix
template <typename Tensor, int Rank>