Sophie

Sophie

distrib > Mandriva > 2010.0 > i586 > by-pkgid > 87f956008f5479527bcce97ec30dbca7 > files > 198

fityk-debug-0.8.6-3mdv2009.1.i586.rpm

// This file is part of fityk program. Copyright (C) Marcin Wojdyr
// Licence: GNU General Public License version 2
// $Id: datatrans.h 381 2008-01-23 15:22:19Z wojdyr $

#ifndef FITYK__DATATRANS__H__
#define FITYK__DATATRANS__H__


#include <boost/spirit/core.hpp>

#include "common.h"
#include "data.h" //Point

using namespace boost::spirit;

class Data;

std::vector<Point> transform_data(std::string const& str, 
                                  std::vector<Point> const& old_points);

bool compile_data_transformation(std::string const& str); 
bool compile_data_expression(std::string const& str);
bool is_data_dependent_expression(std::string const& s);
fp get_transform_expression_value(std::string const &s, Data const* data);
fp get_transform_expr_value(std::vector<int>& code_, 
                            std::vector<Point> const& points);
std::vector<fp> get_all_point_expressions(std::string const &s, 
                                          Data const* data,
                                          bool only_active=true);
bool get_dt_code(std::string const& s, 
                 std::vector<int>& code_, std::vector<fp>& numbers_);
fp get_value_for_point(std::vector<int> const& code_, 
                       std::vector<fp> const& numbers_, fp x, fp y);


/// a part of data expression grammar
struct DataExpressionGrammar : public grammar<DataExpressionGrammar>
{
  template <typename ScannerT>
  struct definition
  {
    definition(DataExpressionGrammar const& /*self*/);

    rule<ScannerT> rprec1, rbool_or, rbool_and, rbool_not, rbool,
                   rprec2, rprec3, rprec4, rprec5; 

    rule<ScannerT> const& start() const { return rprec1; }
  };
};

extern DataExpressionGrammar DataExpressionG;

/// data transformation grammar
struct DataTransformGrammar : public grammar<DataTransformGrammar>
{
  template <typename ScannerT>
  struct definition
  {
    definition(DataTransformGrammar const& /*self*/);

    rule<ScannerT> assignment, statement, range, order;

    rule<ScannerT> const& start() const { return statement; }
  };
};

extern DataTransformGrammar DataTransformG;




#endif