File: t_polynomial.cweb

package info (click to toggle)
dynare 4.5.7-1
  • links: PTS, VCS
  • area: main
  • in suites: buster
  • size: 49,408 kB
  • sloc: cpp: 84,998; ansic: 29,058; pascal: 13,843; sh: 4,833; objc: 4,236; yacc: 3,622; makefile: 2,278; lex: 1,541; python: 236; lisp: 69; xml: 8
file content (80 lines) | stat: -rw-r--r-- 2,039 bytes parent folder | download | duplicates (5)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
@q $Id: t_polynomial.cweb 1210 2007-03-19 21:38:49Z kamenik $ @>
@q Copyright 2004, Ondra Kamenik @>

@ Start of {\tt t\_polynomial.cpp} file.

@c
#include "t_polynomial.h"
#include "kron_prod.h"

@<|PowerProvider::getNext| unfolded code@>;
@<|PowerProvider::getNext| folded code@>;
@<|PowerProvider| destructor code@>;
@<|UTensorPolynomial| constructor conversion code@>;
@<|FTensorPolynomial| constructor conversion code@>;


@ This method constructs unfolded |ut| of higher dimension, deleting
the previous.

@<|PowerProvider::getNext| unfolded code@>=
const URSingleTensor& PowerProvider::getNext(const URSingleTensor* dummy)
{
	if (ut) {
		URSingleTensor* ut_new = new URSingleTensor(nv, ut->dimen()+1);
		KronProd::kronMult(ConstVector(origv), ConstVector(ut->getData()), ut_new->getData());
		delete ut;
		ut = ut_new;
	} else {
		ut = new URSingleTensor(nv, 1);
		ut->getData() = origv;
	}
	return *ut;
}

@ This method just constructs next unfolded |ut| and creates folded
|ft|.
 
@<|PowerProvider::getNext| folded code@>=
const FRSingleTensor& PowerProvider::getNext(const FRSingleTensor* dummy)
{
	getNext(ut);
	if (ft)
		delete ft;
	ft = new FRSingleTensor(*ut);
	return *ft;
}

@ 
@<|PowerProvider| destructor code@>=
PowerProvider::~PowerProvider()
{
	if (ut)
		delete ut;
	if (ft)
		delete ft;
}

@ Clear.
@<|UTensorPolynomial| constructor conversion code@>=
UTensorPolynomial::UTensorPolynomial(const FTensorPolynomial& fp)
	: TensorPolynomial<UFSTensor, UGSTensor, URSingleTensor>(fp.nrows(), fp.nvars())
{
	for (FTensorPolynomial::const_iterator it = fp.begin();
		 it != fp.end(); ++it) {
		insert(new UFSTensor(*((*it).second)));
	}
}

@ Clear.
@<|FTensorPolynomial| constructor conversion code@>=
FTensorPolynomial::FTensorPolynomial(const UTensorPolynomial& up)
	: TensorPolynomial<FFSTensor, FGSTensor, FRSingleTensor>(up.nrows(), up.nvars())
{
	for (UTensorPolynomial::const_iterator it = up.begin();
		 it != up.end(); ++it) {
		insert(new FFSTensor(*((*it).second)));
	}
}

@ End of {\tt t\_polynomial.cpp} file.