Projection.h
Go to the documentation of this file.
/* Frobby: Software for monomial ideal computations.
Copyright (C) 2007 Bjarke Hammersholt Roune (www.broune.com)
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see http://www.gnu.org/licenses/.
*/
#ifndef PROJECTION_GUARD
#define PROJECTION_GUARD
#include <vector>
class Partition;
class Term;
// Recall that a function maps elements from its domain to its
// range. Projection represents a function that maps variables from
// its range ring to its domain ring, where some variables can be
// mapped to zero.
class Projection {
public:
Projection() {}
void reset(const Partition& partition, int set);
void reset(const vector<size_t>& inverseProjections);
void setToIdentity(size_t varCount);
size_t getRangeVarCount() const;
size_t getDomainVar(size_t rangeVar);
void project(Exponent* to, const Exponent* from) const;
void inverseProject(Term& to, const Exponent* from) const;
size_t inverseProjectVar(size_t rangeVar) const;
void swap(Projection& projection);
void print(FILE* file) const;
bool domainVarHasProjection(size_t var) const;
private:
void updateHasProjections();
vector<size_t> _offsets;
mutable vector<int> _domainVarHasProjection;
};
#endif
Partition
Definition Partition.h:20
Projection
Definition Projection.h:29
Projection::swap
void swap(Projection &projection)
Definition Projection.cpp:111
Projection::inverseProject
void inverseProject(Term &to, const Exponent *from) const
Definition Projection.cpp:78
Projection::reset
void reset(const Partition &partition, int set)
Definition Projection.cpp:28
Projection::updateHasProjections
void updateHasProjections()
Definition Projection.cpp:116
Projection::getDomainVar
size_t getDomainVar(size_t rangeVar)
Definition Projection.cpp:67
Projection::setToIdentity
void setToIdentity(size_t varCount)
Definition Projection.cpp:59
Projection::_domainVarHasProjection
vector< int > _domainVarHasProjection
Definition Projection.h:56
Projection::domainVarHasProjection
bool domainVarHasProjection(size_t var) const
Definition Projection.cpp:89
Projection::print
void print(FILE *file) const
Definition Projection.cpp:104
Projection::project
void project(Exponent *to, const Exponent *from) const
Definition Projection.cpp:72
Projection::Projection
Projection()
Definition Projection.h:31
Projection::inverseProjectVar
size_t inverseProjectVar(size_t rangeVar) const
Definition Projection.cpp:84
Projection::getRangeVarCount
size_t getRangeVarCount() const
Definition Projection.cpp:24
Projection::_offsets
vector< size_t > _offsets
Definition Projection.h:55
Term
Term represents a product of variables which does not include a coefficient.
Definition Term.h:49
Exponent
unsigned int Exponent
Definition stdinc.h:89