/***************************************************************************
   begin                : Sat Jul 21 2001
   copyright            : (C) 2001 by Victor R�er
   email                : victor_roeder@gmx.de
   copyright            : (C) 2002,2003 by Roberto Raggi
   email                : roberto@kdevelop.org
   copyright            : (C) 2005 by Adam Treat
   email                : manyoso@yahoo.com
   copyright            : (C) 2006 by David Nolden
   email                : david.nolden.kdevelop@art-master.de
***************************************************************************/

/***************************************************************************
 *                                                                         *
 *   This program is free software; you can redistribute it and/or modify  *
 *   it under the terms of the GNU General Public License as published by  *
 *   the Free Software Foundation; either version 2 of the License, or     *
 *   (at your option) any later version.                                   *
 *                                                                         *
 ***************************************************************************/
#ifndef EXPRESSIONINFO_H
#define EXPRESSIONINFO_H

#include "stringhelpers.h"

using namespace StringHelpers;

struct ExpressionInfo {
  private:
    TQString m_expr;
  
  public:
  
    enum Type {
      InvalidExpression = 0,
      NormalExpression = 1,
      TypeExpression = 2
    };
  
    Type t;
    int start, end;
  
    TQString expr() {
      return m_expr;
    }
  
    void setExpr( const TQString& str ) {
      m_expr = clearComments( str );
    }
  
    ExpressionInfo( TQString str ) : t(  NormalExpression ), start( 0 ), end( str.length() ) {
      setExpr( str );
    
    }
  
    ExpressionInfo() : t( InvalidExpression ), start(0), end(0) {
    }
  
    operator bool() {
      return t != InvalidExpression && !m_expr.isEmpty();
    }
  
    bool isTypeExpression() {
      return t == TypeExpression && !m_expr.isEmpty();
    }
  
    bool canBeTypeExpression() {
      return t & TypeExpression && !m_expr.isEmpty();
    }
  
    bool isNormalExpression() {
      return t == NormalExpression && !m_expr.isEmpty();
    }
  
    bool canBeNormalExpression() {
      return t & NormalExpression && !m_expr.isEmpty();
    }
  
    TQString typeAsString() {
      TQString res ;
      if( t & NormalExpression )
        res += "NormalExpression, ";
      if( t & TypeExpression )
        res += "TypeExpression, ";
      if( t == InvalidExpression )
        res += "InvalidExpression, ";
      if( !res.isEmpty() ) {
        res = res.left( res.length() - 2 );
      } else {
        res = "Unknown";
      }
      return res;
    }
};



#endif
