Re: Bug and Fix - Compiling with gcc-4.1.1

Peter Gottschling <[email protected]> Fri, 28 Apr 2006 13:29:12 -0400
Newsgroups gmane.comp.lib.mtl.devel
Message-ID <[email protected]>
Thank you Leonardo,

I added the include in the repository.  Unfortunately, missing includes 
can sometimes remain undiscovered for a while because the header file 
can be included somewhere else, which is likely for cassert.

Best Regards,
Peter

On 28.04.2006, at 12:17, Leonardo Bitencourt wrote:

> Hello,
>
> My name is Leonardo Bitencourt, work at NASA and would like to report 
> a small bug in the last version of MTL-2.1.2-22.
>
> I downloaded the last version of MTL-2.1.2-22 and had some error 
> messages during the compilation time. I thought that it could be some 
> flaw of my compiler, because I am having some problems to compile 
> standard templates.
>  I spent some time reading the error messages and found out that the 
> compiler was having problems find the assert function declaration in 
> the file "initialize.h".
> To solve the problem, I just included the proper header #include 
> <cassert> and everything worked fine.
>  Ok, that is my contribuition!
>
>  Regards,
> Leonardo
> -- 
> ___________________________________________________________
> Leonardo Ostan Bitencourt
> 5th year - Aeronautical Engineering
> Instituto Tecnologico de Aeronautica - ITA
> Visiting Student at Aeroelasticity Branch
> NASA Langley Research Center            

_______________________________________________
> This list is archived at http://www.osl.iu.edu/MailArchives/mtl-devel/
------------
Peter Gottschling
Research Associate
Open Systems Laboratory
Indiana University
301i Lindley Hall
Bloomington, IN 47405
Tel.: +1 812 855-8898   Fax: +1 812 856 0853
http://www.osl.iu.edu/~pgottsch

_______________________________________________
This list is archived at http://www.osl.iu.edu/MailArchives/mtl-devel/
initialize.h (text/plain, 2.4 KB)
// -*- c++ -*-
//
// Software License for MTL
// 
// Copyright (c) 2001-2005 The Trustees of Indiana University. All rights reserved.
// Copyright (c) 1998-2001 University of Notre Dame. All rights reserved.
// Authors: Andrew Lumsdaine, Jeremy G. Siek, Lie-Quan Lee
// 
// This file is part of the Matrix Template Library
// 
// See also license.mtl.txt in the distribution.

#ifndef MTL_INITIALIZE_H
#define MTL_INITIALIZE_H

#include <iostream>
//#include <cassert>
#include "mtl/matrix_stream.h"

#include "mtl/entry.h"
#include "mtl/mtl_complex.h"
#include "mtl/conj.h"
#include "mtl/mtl_set.h"

namespace mtl {

using std::complex;
using std::conj;

class symmetric_tag;

//need add mmio.c on using
template <class Matrix, class T>
void
__initialize(Matrix& A, matrix_market_stream<T>& s, 
	     symmetric_tag)
{
  typedef typename Matrix::value_type VT;
  entry2<VT> e;

  if ( s.is_symmetric() ) {
    while( ! s.eof() ) {
      s >> e;
      int row = e.row;
      int col = e.col;
      A(row, col) = e.value;
    }
  } else {
    std::cout << " matrix type is symmetric but the matrix in the file is not" << std::endl;
    assert(0);
  }
}

template <class Matrix, class ANY_TAG, class T>
void
__initialize(Matrix& A, matrix_market_stream<T>& s,
	     ANY_TAG)
{
  typedef typename Matrix::value_type VT;
  entry2<VT> e;

  if ( s.is_symmetric() ) {
    while( ! s.eof() ) {
      s >> e;
      int row = e.row;		// g++ internal compiler error
      int col = e.col;		//      A(e.row, e.col) = e.value;
      A(row, col) = e.value;
      if ( s.is_hermitian() )  
	A(e.col, e.row) = std::conj(e.value);
      else
	A(e.col, e.row) = e.value;
    }
  } else {
    while( ! s.eof() ) {
      s >> e;
      int row = e.row;
      int col = e.col;
      A(row, col) = e.value;
    }
  }
}

template <class Matrix, class TT>
void
initialize(Matrix& A, matrix_market_stream<TT>& s)
{
  typedef typename Matrix::value_type T;
  typedef typename Matrix::shape Shape;
  mtl::set_value(A, T(0));
  mtl::__initialize(A, s, Shape());
}

//need add iohb.c on using
template <class Matrix, class TT>
void
initialize(Matrix& A, harwell_boeing_stream<TT>& s)
{ //for hbs, shape doesn't matter
  typedef typename Matrix::size_type Int;
  typedef typename Matrix::value_type T;

  mtl::set_value(A, T(0));
  entry2<T> e;

  while( ! s.eof() ) {
    s >> e;
    Int row = e.row;
    Int col = e.col;
    A(row, col) = e.value;
  }
}

} /* namespace mtl */

#endif