Tree @688050c8-00bf-45cb-bdde-85796de4622a/main (Download .tar.gz)
- base
- build-scripts
- debian
- doc
- examples
- GL
- gl-matrix-2.4.0-pruned
- GUI
- patches
- prc
- tests
- webgl
- absyn.cc
- absyn.h
- access.cc
- access.h
- align.h
- angle.h
- application.cc
- application.h
- array.cc
- array.h
- arrayop.h
- aspy.py
- asy-keywords.el
- asy-list.pl
- asy.ico
- asy.rc
- asymptote.nsi
- asymptote.spec
- autogen.sh
- ax_pthread.m4
- bbox.h
- bbox3.h
- beziercurve.cc
- beziercurve.h
- bezierpatch.cc
- bezierpatch.h
- BUGS
- builtin.cc
- builtin.h
- callable.cc
- callable.h
- camp.l
- camp.tab.cc
- camp.tab.h
- camp.y
- camperror.cc
- camperror.h
- castop.h
- cc-mode2.el
- ChangeLog
- coder.cc
- coder.h
- coenv.cc
- coenv.h
- common.h
- config.guess
- config.h.in
- config.sub
- configure
- configure.ac
- constructor.cc
- dec.cc
- dec.h
- Delaunay.cc
- Delaunay.h
- drawclipbegin.h
- drawclipend.h
- drawelement.h
- drawfill.cc
- drawfill.h
- drawgrestore.h
- drawgroup.h
- drawgsave.h
- drawimage.h
- drawlabel.cc
- drawlabel.h
- drawlayer.h
- drawpath.cc
- drawpath.h
- drawpath3.cc
- drawpath3.h
- drawsurface.cc
- drawsurface.h
- drawverbatim.h
- entry.cc
- entry.h
- env.cc
- env.h
- envcompleter.cc
- envcompleter.h
- EnvVarUpdate.nsh
- errormsg.cc
- errormsg.h
- errors
- errortest.asy
- exp.cc
- exp.h
- fftw++.cc
- fftw++.h
- fftw++asy.cc
- fileio.cc
- fileio.h
- findsym.pl
- flatguide.cc
- flatguide.h
- fpu.h
- frame.h
- fundec.cc
- fundec.h
- gc-8.0.4.tar.gz
- genv.cc
- genv.h
- getopt.c
- getopt.h
- getopt1.c
- glew.c
- glrender.cc
- glrender.h
- gsl.cc
- guide.cc
- guide.h
- guideflags.h
- impdatum.cc
- inst.h
- INSTALL
- install-sh
- interact.cc
- interact.h
- item.h
- jsfile.cc
- jsfile.h
- keywords.cc
- keywords.pl
- knot.cc
- knot.h
- lex.yy.cc
- lexical.h
- libatomic_ops-7.6.10.tar.gz
- LICENSE
- LICENSE.LESSER
- lnkX64IconFix.nsh
- locate.cc
- locate.h
- main.cc
- Makefile.in
- material.h
- mathop.h
- memory.h
- mod.h
- modifier.h
- name.cc
- name.h
- newexp.cc
- newexp.h
- opcodes.h
- opsymbols.pl
- pair.h
- parser.cc
- parser.h
- path.cc
- path.h
- path3.cc
- path3.h
- pen.cc
- pen.h
- picture.cc
- picture.h
- pipestream.cc
- pipestream.h
- Pipfile
- policy.h
- prcfile.h
- predicates.cc
- predicates.h
- primitives.h
- process.cc
- process.h
- profile.py
- profiler.h
- program.cc
- program.h
- psfile.cc
- psfile.h
- README
- record.cc
- record.h
- refaccess.cc
- refaccess.h
- ReleaseNotes
- revision.cc
- rounding.h
- runarray.cc
- runarray.h
- runarray.in
- runbacktrace.cc
- runbacktrace.h
- runbacktrace.in
- runfile.cc
- runfile.h
- runfile.in
- runhistory.cc
- runhistory.h
- runhistory.in
- runlabel.cc
- runlabel.h
- runlabel.in
- runmath.cc
- runmath.h
- runmath.in
- runpair.cc
- runpair.h
- runpair.in
- runpath.cc
- runpath.h
- runpath.in
- runpath3d.cc
- runpath3d.h
- runpath3d.in
- runpicture.cc
- runpicture.h
- runpicture.in
- runstring.cc
- runstring.h
- runstring.in
- runsystem.cc
- runsystem.h
- runsystem.in
- runtime.cc
- runtime.h
- runtime.in
- runtime.pl
- runtimebase.in
- runtriple.cc
- runtriple.h
- runtriple.in
- seconds.h
- settings.cc
- settings.h
- shaders.cc
- shaders.h
- simpson.cc
- stack.cc
- stack.h
- statistics.h
- stm.cc
- stm.h
- symbol.cc
- symbol.h
- table.h
- texfile.cc
- texfile.h
- TODO
- tr.cc
- tr.h
- transform.h
- triple.h
- types.cc
- types.h
- util.cc
- util.h
- varinit.cc
- varinit.h
- virtualfieldaccess.cc
- virtualfieldaccess.h
- vm.h
- wce
- xstream.h
table.h @688050c8-00bf-45cb-bdde-85796de4622a/main — raw · history · blame
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 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 | /***** * table.h * Andy Hammerlindl 2002/06/18 * * Table used to bind symbols to vars and types in a namespace. *****/ #ifndef TABLE_H #define TABLE_H #include <cassert> #include <utility> #include "symbol.h" #include "common.h" namespace sym { template <class B> class table; template <class B> std::ostream& operator<< (std::ostream& out, const table<B>& t); template <class B> class table { protected: typedef mem::multimap<symbol CONST,B> scope_t; typedef typename scope_t::iterator scope_iterator; typedef mem::list<scope_t> scopes_t; typedef mem::list<B> name_t; typedef typename name_t::iterator name_iterator; typedef mem::map<symbol CONST,name_t> names_t; typedef typename names_t::iterator names_iterator; scopes_t scopes; names_t names; void remove(symbol key); public : table(); void enter(symbol key, B value); B look(symbol key); // Allows scoping and overloading of symbols of the same name void beginScope(); void endScope(); // Copies all bindings in the top scope to the scope underneath it, and // removes the the top scope. void collapseScope(); // Adds to l, all names prefixed by start. void completions(mem::list<symbol >& l, string start); friend std::ostream& operator<< <B> (std::ostream& out, const table& t); }; template <class B> inline table<B>::table() { beginScope(); } template <class B> inline void table<B>::enter(symbol key, B value) { scopes.front().insert(std::make_pair(key,value)); names[key].push_front(value); } template <class B> inline B table<B>::look(symbol key) { if (!names[key].empty()) return names[key].front(); return 0; } template <class B> inline void table<B>::beginScope() { scopes.push_front(scope_t()); } template <class B> inline void table<B>::remove(symbol key) { if (!names[key].empty()) names[key].pop_front(); } template <class B> inline void table<B>::endScope() { scope_t &scope = scopes.front(); for (scope_iterator p = scope.begin(); p != scope.end(); ++p) remove(p->first); scopes.pop_front(); } template <class B> inline void table<B>::collapseScope() { scope_t scope = scopes.front(); scopes.pop_front(); scopes.front().insert(scope.begin(), scope.end()); } // Returns true if start is a prefix for name; eg, mac is a prefix of machine. inline bool prefix(string start, string name) { return equal(start.begin(), start.end(), name.begin()); } template <class B> inline void table<B>::completions(mem::list<symbol>& l, string start) { for (names_iterator p = names.begin(); p != names.end(); ++p) if (prefix(start, p->first) && !p->second.empty()) l.push_back(p->first); } } // namespace sym #endif |