source: git/factory/cf_eval.cc @ fbb0173

spielwiese
Last change on this file since fbb0173 was 650f2d8, checked in by Mohamed Barakat <mohamed.barakat@…>, 13 years ago
renamed assert.h -> cf_assert.h in factory
  • Property mode set to 100644
File size: 1.6 KB
RevLine 
[493c477]1/* emacs edit mode for this file is -*- C++ -*- */
[341696]2/* $Id$ */
[2dd068]3
[ab4548f]4#include <config.h>
5
[650f2d8]6#include "cf_assert.h"
[c5323e]7
[2dd068]8#include "cf_defs.h"
9#include "cf_eval.h"
10
11static CanonicalForm evalCF ( const CanonicalForm & f, const CFArray & a, int m, int n );
12
13
14Evaluation& Evaluation::operator= ( const Evaluation & e )
15{
16    if ( this != &e ) {
[806c18]17        values = e.values;
[2dd068]18    }
19    return *this;
20}
21
22CanonicalForm
23Evaluation::operator() ( const CanonicalForm & f ) const
24{
25    if ( f.inCoeffDomain() || f.level() < values.min() )
[806c18]26        return f;
[2dd068]27    else  if ( f.level() < values.max() )
[806c18]28        return evalCF( f, values, values.min(), f.level() );
[2dd068]29    else
[806c18]30        return evalCF( f, values, values.min(), values.max() );
[2dd068]31}
32
33CanonicalForm
34Evaluation::operator() ( const CanonicalForm & f, int i, int j ) const
35{
36    if ( i > j )
[806c18]37        return f;
[2dd068]38    return evalCF( f, values, i, j );
39}
40
41void
42Evaluation::nextpoint()
43{
44    int n = values.max();
45    for ( int i = values.min(); i <= n; i++ )
[806c18]46        values[i] += 1;
[2dd068]47}
48
[38ac8c]49void
50Evaluation::setValue(int i, const CanonicalForm& f)
51{
52  if (i < values.min() || i > values.max())
53    return;
54  values[i]= f;
55}
56
[c5323e]57#ifndef NOSTREAMIO
[181148]58OSTREAM&
59operator<< ( OSTREAM& s, const Evaluation &e )
[2dd068]60{
[6400f5]61    e.values.print(s);
[2dd068]62    return s;
63}
[c5323e]64#endif /* NOSTREAMIO */
[2dd068]65
66CanonicalForm
67evalCF ( const CanonicalForm & f, const CFArray & a, int m, int n )
68{
69    if ( m > n )
[806c18]70        return f;
[2dd068]71    else {
[806c18]72        CanonicalForm result = f;
73        while ( n >= m ) {
74            result = result( a[n], Variable( n ) );
75            n--;
76        }
77        return result;
[2dd068]78    }
79//    iterated method turned out to be faster than
80//    return evalCF( f( a[n], Variable( n ) ), a, m, n-1 );
81}
Note: See TracBrowser for help on using the repository browser.