diff options
author | Karl Berry <karl@freefriends.org> | 2021-02-25 19:22:25 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2021-02-25 19:22:25 +0000 |
commit | ad547a6b5986815fda458221149728d9d9ab1d87 (patch) | |
tree | 16296910eb3eca724371474ea9aea3994dc69614 /Build/source/utils/asymptote/guide.cc | |
parent | 947b43de3dd21d58ccc2ffadefc4441ea1c2a813 (diff) |
restore Build,TODO from r57911
git-svn-id: svn://tug.org/texlive/trunk@57915 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Build/source/utils/asymptote/guide.cc')
-rw-r--r-- | Build/source/utils/asymptote/guide.cc | 53 |
1 files changed, 53 insertions, 0 deletions
diff --git a/Build/source/utils/asymptote/guide.cc b/Build/source/utils/asymptote/guide.cc new file mode 100644 index 00000000000..7c01da75e3f --- /dev/null +++ b/Build/source/utils/asymptote/guide.cc @@ -0,0 +1,53 @@ +/***** + * guide.cc + * Andy Hammerlindl 2005/02/23 + * + *****/ + +#include "guide.h" + +namespace camp { + +multiguide::multiguide(guidevector& v) +{ + // This constructor tests if the first subguide is also a multiguide and, + // if possible, uses the same base, extending it beyond what is used. + multiguide *rg = v.empty() ? 0 : dynamic_cast<multiguide *>(v[0]); + if (rg && rg->base->size() == rg->length) { + base = rg->base; + base->insert(base->end(), v.begin()+1, v.end()); + } + else + base = new guidevector(v); + + length = base->size(); +} + +void multiguide::flatten(flatguide& g, bool allowsolve) +{ + size_t n=length; + if(n > 0) { + for(size_t i=0; i+1 < n; ++i) { + subguide(i)->flatten(g,allowsolve); + if(!allowsolve && subguide(i)->cyclic()) { + g.precyclic(true); + g.resolvecycle(); + } + } + subguide(n-1)->flatten(g,allowsolve); + } +} + +void multiguide::print(ostream& out) const +{ + side lastLoc=JOIN; + for(size_t i=0; i < length; ++i) { + guide *g = subguide(i); + side loc = g->printLocation(); + adjustLocation(out,lastLoc,loc); + g->print(out); + lastLoc=loc; + } +} + +} // namespace camp |