Teuchos - Trilinos Tools Package Version of the Day
Teuchos_ArrayView.cpp
00001 // @HEADER
00002 // ***********************************************************************
00003 //
00004 //                    Teuchos: Common Tools Package
00005 //                 Copyright (2004) Sandia Corporation
00006 //
00007 // Under terms of Contract DE-AC04-94AL85000, there is a non-exclusive
00008 // license for use of this work by or on behalf of the U.S. Government.
00009 //
00010 // Redistribution and use in source and binary forms, with or without
00011 // modification, are permitted provided that the following conditions are
00012 // met:
00013 //
00014 // 1. Redistributions of source code must retain the above copyright
00015 // notice, this list of conditions and the following disclaimer.
00016 //
00017 // 2. Redistributions in binary form must reproduce the above copyright
00018 // notice, this list of conditions and the following disclaimer in the
00019 // documentation and/or other materials provided with the distribution.
00020 //
00021 // 3. Neither the name of the Corporation nor the names of the
00022 // contributors may be used to endorse or promote products derived from
00023 // this software without specific prior written permission.
00024 //
00025 // THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY
00026 // EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
00027 // IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
00028 // PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE
00029 // CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
00030 // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
00031 // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
00032 // PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
00033 // LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
00034 // NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
00035 // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
00036 //
00037 // Questions? Contact Michael A. Heroux (maherou@sandia.gov)
00038 //
00039 // ***********************************************************************
00040 // @HEADER
00041 
00042 #include <Teuchos_ArrayView.hpp>
00043 
00044 namespace Teuchos {
00045 
00046 template<>
00047 TEUCHOSCORE_LIB_DLL_EXPORT std::string
00048 ArrayView<float>::toString() const
00049 {
00050   using Teuchos::as;
00051   std::ostringstream ss;
00052 
00053   debug_assert_valid_ptr();
00054 
00055   ss.setf (std::ios::scientific);
00056   // 8 = round(23 * log10(2)) + 1.  That's one decimal digit more
00057   // than the binary precision justifies, which should be plenty.
00058   // Guy Steele et al. have a better algorithm for floating-point
00059   // I/O, but using a lot of digits is the lazy approach.
00060   ss.precision (8);
00061   ss << "{";
00062   for (size_type i = 0; i < size (); ++i) {
00063     ss << operator[] (i);
00064     if (i + 1 < size ()) {
00065       ss << ", ";
00066     }
00067   }
00068   ss << "}";
00069   return ss.str ();
00070 }
00071 
00072 template<>
00073 TEUCHOSCORE_LIB_DLL_EXPORT std::string
00074 ArrayView<const float>::toString() const
00075 {
00076   using Teuchos::as;
00077   std::ostringstream ss;
00078 
00079   debug_assert_valid_ptr();
00080 
00081   ss.setf (std::ios::scientific);
00082   // 8 = round(23 * log10(2)) + 1.  That's one decimal digit more
00083   // than the binary precision justifies, which should be plenty.
00084   // Guy Steele et al. have a better algorithm for floating-point
00085   // I/O, but using a lot of digits is the lazy approach.
00086   ss.precision (8);
00087   ss << "{";
00088   for (size_type i = 0; i < size (); ++i) {
00089     ss << operator[] (i);
00090     if (i + 1 < size ()) {
00091       ss << ", ";
00092     }
00093   }
00094   ss << "}";
00095   return ss.str ();
00096 }
00097 
00098 template<>
00099 TEUCHOSCORE_LIB_DLL_EXPORT std::string
00100 ArrayView<double>::toString() const
00101 {
00102   using Teuchos::as;
00103   std::ostringstream ss;
00104 
00105   debug_assert_valid_ptr();
00106 
00107   ss.setf (std::ios::scientific);
00108   // 17 = round(52 * log10(2)) + 1.  That's one decimal digit more
00109   // than the binary precision justifies, which should be plenty.  Guy
00110   // Steele et al. have a better algorithm for floating-point I/O, but
00111   // using a lot of digits is the lazy approach.
00112   ss.precision (17);
00113   ss << "{";
00114   for (size_type i = 0; i < size (); ++i) {
00115     ss << operator[] (i);
00116     if (i + 1 < size ()) {
00117       ss << ", ";
00118     }
00119   }
00120   ss << "}";
00121   return ss.str ();
00122 }
00123 
00124 template<>
00125 TEUCHOSCORE_LIB_DLL_EXPORT std::string
00126 ArrayView<const double>::toString() const
00127 {
00128   using Teuchos::as;
00129   std::ostringstream ss;
00130 
00131   debug_assert_valid_ptr();
00132 
00133   ss.setf (std::ios::scientific);
00134   // 17 = round(52 * log10(2)) + 1.  That's one decimal digit more
00135   // than the binary precision justifies, which should be plenty.  Guy
00136   // Steele et al. have a better algorithm for floating-point I/O, but
00137   // using a lot of digits is the lazy approach.
00138   ss.precision (17);
00139   ss << "{";
00140   for (size_type i = 0; i < size (); ++i) {
00141     ss << operator[] (i);
00142     if (i + 1 < size ()) {
00143       ss << ", ";
00144     }
00145   }
00146   ss << "}";
00147   return ss.str ();
00148 }
00149 
00150 } // namespace Teuchos
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines