File: Integer.cc

package info (click to toggle)
cadabra2 2.4.3.2-3
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 78,796 kB
  • sloc: ansic: 133,450; cpp: 92,064; python: 1,530; javascript: 203; sh: 184; xml: 182; objc: 53; makefile: 51
file content (58 lines) | stat: -rw-r--r-- 1,528 bytes parent folder | download | duplicates (3)
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

#include "properties/Integer.hh"
#include "Cleanup.hh"
#include "Kernel.hh"
#include "algorithms/collect_terms.hh"

using namespace cadabra;

std::string Integer::name() const
	{
	return "Integer";
	}

bool Integer::parse(Kernel& kernel, keyval_t& keyvals)
	{
	keyval_t::iterator kv=keyvals.find("range");
	if(kv!=keyvals.end()) {
		from=Ex(Ex::child(kv->second,0));
		to  =Ex(Ex::child(kv->second,1));
		//	tr.subtree(from, tr.child(seq,0), tr.child(seq,1));
		//	tr.subtree(to,   tr.child(seq,1), tr.end(seq));
		//	from=to_long(*(tr.child(seq,0)->multiplier));
		//	to  =to_long(*(tr.child(seq,1)->multiplier));

		Ex::iterator sm=difference.set_head(str_node("\\sum"));
		difference.append_child(sm,to.begin())->fl.bracket=str_node::b_round;
		Ex::iterator term2=difference.append_child(sm,from.begin());
		flip_sign(term2->multiplier);
		term2->fl.bracket=str_node::b_round;
		difference.append_child(sm,str_node("1"))->fl.bracket=str_node::b_round;

		Ex::sibling_iterator sib=difference.begin(sm);
		while(sib!=difference.end(sm)) {
			if(*sib->name=="\\sum") {
				difference.flatten(sib);
				sib=difference.erase(sib);
				}
			else ++sib;
			}

		collect_terms ct(kernel, difference);
		ct.apply(sm);
		}

	//	Ex::iterator top=difference.begin();
	//	cleanup_dispatch(kernel, difference, top);

	return true;
	}

void Integer::display(std::ostream& str) const
	{
	str << "Integer";
	if(from.begin()!=from.end()) {
		str << "(" << *(from.begin()->multiplier) << ".."
		    << *(to.begin()->multiplier) << ")";
		}
	}