File: labelling

package info (click to toggle)
frobby 0.9.6-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 11,616 kB
  • sloc: cpp: 30,134; sh: 1,184; makefile: 306; ansic: 102; lisp: 10
file content (73 lines) | stat: -rw-r--r-- 2,034 bytes parent folder | download | duplicates (4)
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
void IrreducibleDecomFacade::
printLabels(BigIdeal& bigIdeal, FILE* out, const string& format) {
  Ideal ideal(bigIdeal.getVarCount());
  TermTranslator translator(bigIdeal, ideal);

  Ideal idealCopy(ideal);
  Ideal decom(ideal.getVarCount());

  if (idealCopy.getGeneratorCount() > 0)
	translator.addArtinianPowers(idealCopy);

  computeIrreducibleDecom(idealCopy, new DecomRecorder(&decom));
  // idealCopy gets cleared here, which is why we make a copy.

  beginAction("Computing labels");

  IdealWriter* writer =
	IOHandler::getIOHandler(format)->createWriter(out, &translator);

  size_t varCount = decom.getVarCount();
  Ideal::const_iterator decomEnd = decom.end();
  for (Ideal::const_iterator d = decom.begin(); d != decomEnd; ++d) {
	Term de(*d, varCount);
	fputc('*', out);
	writer->writeJustATerm(de);
	fputc('\n', out);
	for (size_t var = 0; var < varCount; ++var)
	  if (de[var] == 0)
		de[var] = translator.getMaxId(var);

	vector<vector<const Exponent*> > labels(varCount + 1);
	Ideal::const_iterator end = ideal.end();
	for (Ideal::const_iterator it = ideal.begin(); it != end; ++it) {
	  if (de.dominates(*it)) {
		size_t equalVar = 0;
		size_t equalCount = 0;
		for (size_t var = 0; var < varCount; ++var) {
		  if (de[var] == (*it)[var]) {
			equalVar = var;
			++equalCount;
		  }
		}
		if (equalCount == 1)
		  labels[equalVar].push_back(*it);
		else
		  labels[varCount].push_back(*it);
	  }
	}

	for (size_t var = 0; var <= varCount; ++var) {
	  if (var == varCount && labels[var].empty())
		continue;

	  if (var < varCount)
		fprintf(out, " %s:", translator.getNames().getName(var).c_str());
	  else
		fputs(" other:", out);

	  if (var < varCount && de[var] == translator.getMaxId(var))
		fputs(" unbounded", out);

	  for (size_t i = 0; i < labels[var].size(); ++i) {
		if (i != 0)
		  fputc(',', out);
		writer->writeJustATerm(Term(labels[var][i], varCount));
	  }
	  fputc('\n', out);
	}
	fputc('\n', out);
  }

  endAction();
}