ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/OpenMD/trunk/test/utils/ReplaceWildCard.hpp
(Generate patch)

Comparing trunk/test/utils/ReplaceWildCard.hpp (file contents):
Revision 166 by tim, Wed Oct 27 23:17:19 2004 UTC vs.
Revision 170 by tim, Thu Oct 28 03:27:03 2004 UTC

# Line 32 | Line 32
32  
33   #ifndef UTILS_REPLACEWILDCARD_HPP
34   #define UTILS_REPLACEWILDCARD_HPP
35 <
35 >
36 > #include <iostream>
37   #include <vector>
38  
39   namespace oopse{
40  
41 < //use -1 to represent the wild card, it is easy and cheap to operate one integer (or index) instead of string
41 > //use -1 to represent the wild card, it is easy and cheap to handle integer
42   const int WildCard = -1;
43  
44 + std::vector<std::vector<int> > ReplaceWildCard(int beginIndex, int endIndex, int nWildCard);
45 + std::vector<std::vector<int> > join( const std::vector<int>& firstPart, const std::vector<std::vector<int> >& secondPart);
46 +
47   /**
48   * Driver function for replacing
49   * @code
# Line 51 | Line 55 | const int WildCard = -1;
55   * //0, -1, 2
56   * //0, 1, -1
57   * //-1, -1, 2
58 + * //-1, 1, -1
59   * //0, -1, -1
60   * //-1, -1, -1
61   * @endcode
# Line 61 | Line 66 | std::vector<std::vector<int> > ReplaceAll(int num) {
66      
67      for (int i = 0; i <= num; i++) {
68          v = ReplaceWildCard(0, num -1, i);
69 <        results.insert(v.begin(), v.end(), results.end());
69 >        results.insert(results.end(), v.begin(), v.end());
70      }
71      return results;
72   }
73  
74   /** Replace a sequence with n wildcards, returns all of the possible replacement*/
75 < std::vector<vector<int> > ReplaceWildCard(int beginIndex, int endIndex, int nWildCard) {
75 > std::vector<std::vector<int> > ReplaceWildCard(int beginIndex, int endIndex, int nWildCard) {
76      std::vector<std::vector<int> > results;
77  
78      int len = endIndex + 1 - beginIndex;
# Line 77 | Line 82 | std::vector<vector<int> > ReplaceWildCard(int beginInd
82          //if the number of the wild card is zero, just return the whole sequence
83          std::vector<int> singleResult;
84  
85 <        for(int i = beginIdex; i <= endIndex; i++)
85 >        for(int i = beginIndex; i <= endIndex; i++)
86              singleResult.push_back(i);
87  
88          results.push_back(singleResult);
# Line 90 | Line 95 | std::vector<vector<int> > ReplaceWildCard(int beginInd
95          exit(1);
96      } else if (len == nWildCard) {
97          //if the lengths are the same, we only have one choice
98 <        //replace all of the index with WildCard
98 >        //replace all of the indices with WildCard
99          std::vector<int> singleResult(nWildCard, WildCard);
100          results.push_back(singleResult);
101          return results;
102      } else {
103 <        //we need to recursive calling ReplaceWildCard
103 >        //we need to recursively calling ReplaceWildCard
104          std::vector<int> firstPart;
105          std::vector<std::vector<int> > secondPart;
106 +        std::vector<std::vector<int> > sequences;
107  
108          for (int i = 0; i <=nRecursive; i ++) {
109 <            firstPart.push_back( beginIndex + i);
109 >            
110 >            firstPart.clear();
111 >            for(int j = 0; j < i; ++j) {
112 >                firstPart.push_back(beginIndex + j);
113 >            }      
114 >            firstPart.push_back(WildCard);
115 >            
116              secondPart = ReplaceWildCard(beginIndex + i + 1, endIndex, nWildCard - 1);
117 <            results.push_back(adjoint(firstPart, secondPart));
117 >            sequences = join(firstPart, secondPart);
118 >            results.insert(results.end(), sequences.begin(), sequences.end());              
119          }
120  
121          return results;
122      }
123   }
124  
125 < std::vector<std::vector<int> > adjoint( int firstPart, const std::vector<std::vector<int> >& secondPart){
125 > std::vector<std::vector<int> > join( const std::vector<int>& firstPart, const std::vector<std::vector<int> >& secondPart){
126      std::vector<std::vector<int> > results(secondPart.size());
127  
128      for (int i = 0; i < secondPart.size(); i++) {
129 <        results[i].insert(firstPart.being(), firstPart.end(), results[i].end());
130 <        results[i].insert(secondPart[i].begin(), secondPart[i].end(), results[i].begin());
129 >        results[i].insert(results[i].end(), firstPart.begin(), firstPart.end());
130 >        results[i].insert(results[i].end(), secondPart[i].begin(), secondPart[i].end());
131      }
132  
133      return results;
# Line 123 | Line 136 | std::vector<std::vector<int> > adjoint( int firstPart,
136  
137   }//end namespace std
138  
139 < #endif //UTILS_REPLACEWILDCARD_HPP
139 > #endif //UTILS_REPLACEWILDCARD_HPP

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines