1 /* $XConsortium: SubstTable.C /main/1 1996/07/29 17:05:48 cde-hp $ */
2 // Copyright (c) 1994 James Clark
3 // See the file COPYING for copying permission.
5 #ifndef SubstTable_DEF_INCLUDED
6 #define SubstTable_DEF_INCLUDED 1
9 namespace SP_NAMESPACE {
13 SubstTable<T>::SubstTable()
19 void SubstTable<T>::addSubst(T from, T to)
21 if (table_.size() == 0) {
22 table_.resize(T(-1) + 1);
23 for (int i = 0; i < T(-1) + 1; i++)
26 if (table_[from] != to)
32 String<T> SubstTable<T>::inverse(T ch) const
35 const T *p = table_.data();
36 size_t length = table_.size();
37 for (size_t i = 0; i < length; i++)
39 // FIXME use mutable if available
40 ((SubstTable<T> *)this)->pairs_ += T(i);
41 ((SubstTable<T> *)this)->pairs_ += p[i];
43 ((SubstTable<T> *)this)->pairsValid_ = 1;
45 const T *p = pairs_.data();
47 return String<T>(&ch, 1);
51 for (size_t n = pairs_.size(); n > 0; n -= 2, p += 2)
58 void SubstTable<T>::inverseTable(SubstTable<T> &inv) const
60 if (table_.size() == 0) {
66 if (inv.table_.size() == 0)
67 inv.table_.resize(T(-1) + 1);
69 for (i = 0; i < T(-1) + 1; i++)
73 for (i = 0; i < T(-1) + 1; i++)
75 inv.table_[table_[i]] = i;
80 void SubstTable<T>::subst(String<T> &str) const
82 for (size_t i = 0; i < str.size(); i++)
90 #endif /* not SubstTable_DEF_INCLUDED */