ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/OpenMD/trunk/src/mdParser/SimplePreprocessor.hpp
(Generate patch)

Comparing trunk/src/mdParser/SimplePreprocessor.hpp (file contents):
Revision 924 by chuckv, Wed Mar 29 22:24:59 2006 UTC vs.
Revision 1024 by tim, Wed Aug 30 18:42:29 2006 UTC

# Line 54 | Line 54
54   /**
55   * @class SimplePreprocessor
56   * @brief A simple preprocessor.
57 < * @note only support #include #ifdef, #ifndef, #endif, #define and #undef, c-like multiple line
58 < *  comment is not support, macro substitude is not support.
57 > * @note only supports #include #ifdef, #ifndef, #endif, #define and #undef, c-like multiple line
58 > *  comment is not supported, macro substitute is not supported.
59   */
60   namespace oopse {
61   class SimplePreprocessor {
62      public:
63 <        bool preprocess(const std::string& filename, ostream& os) {
63 >        bool preprocess(std::istream& myStream, const std::string& filename, int startingLine, ostream& os) {
64              std::set<std::string> defineSet;
65              std::stack<bool> ifStates;
66  
67              ifStates.push(true);
68 <            return doPreprocess(filename, os, defineSet, ifStates);
68 >            return doPreprocess(myStream, filename, startingLine, os, defineSet, ifStates);
69          }
70          
71      private:
72 <        bool doPreprocess(const std::string& filename, ostream& os, std::set<std::string>& defineSet, std::stack<bool>& ifStates) {
73 <            std::ifstream input(filename.c_str());
74 <            if (!input.is_open()) {
75 <                std::stringstream ss;
76 <                ss << "Can not open " << filename << " for preprocessing\n";
77 <                
78 <                sprintf(painCave.errMsg,
79 <                        "Can not open (%s) for processing. \n"
80 <                        "\tPlease check md file name syntax.\n", filename.c_str());
81 <                
82 <                painCave.isFatal = 1;
83 <                simError();
84 <                
85 <                throw OOPSEException(ss.str());                
86 <            }
87 <            int lineNo =1;
72 >        bool doPreprocess(std::istream& myStream, const std::string& filename, int startingLine, ostream& os, std::set<std::string>& defineSet, std::stack<bool>& ifStates) {
73 >            //std::ifstream input(filename.c_str());
74 >            //if (!input.is_open()) {
75 >            //    std::stringstream ss;
76 >            //    ss << "Can not open " << filename << " for preprocessing\n";
77 >            //    
78 >            //    sprintf(painCave.errMsg,
79 >            //            "Can not open (%s) for processing. \n"
80 >            //            "\tPlease check md file name syntax.\n", filename.c_str());
81 >            //    
82 >            //    painCave.isFatal = 1;
83 >            //    simError();
84 >            //    
85 >            //    throw OOPSEException(ss.str());                
86 >            //}
87 >            int lineNo = startingLine;
88              os << "#line " << lineNo << " \"" << filename << "\"\n";
89 <            while(input.getline(buffer, bufferSize)) {
89 >            const int bufferSize = 1024;
90 >            char buffer[bufferSize];
91 >            while(myStream.getline(buffer, bufferSize)) {
92                ++lineNo;
93                std::string line = trimLeftCopy(buffer);
94                if (!line.empty() && line[0] == '#') {
# Line 108 | Line 110 | class SimplePreprocessor {
110                              SimplePreprocessor subPreprocessor;
111                              std::string includeFilename = tokens[1];
112                              includeFilename = includeFilename.substr(1, includeFilename.length() -2);
113 <                            bool ret = subPreprocessor.doPreprocess(includeFilename, os, defineSet, ifStates);
113 >                            std::ifstream includeStream(includeFilename.c_str());
114 >                            if (!includeStream.is_open()) {
115 >                                std::stringstream ss;
116 >                                ss << "Can not open " << filename << " for preprocessing\n";
117 >                                throw OOPSEException(ss.str());
118 >                            }
119 >                            
120 >                            bool ret = subPreprocessor.doPreprocess(includeStream, includeFilename, 1, os, defineSet, ifStates);
121                              if (!ret) {
122                                  std::cout << "Error in preprocessing\n";
123                                  return false;
# Line 135 | Line 144 | class SimplePreprocessor {
144                             }
145                             os << std::endl;
146                          } else {
147 <                            std::cout << tokens[0] << " is not support" << std::endl;
147 >                            std::cout << tokens[0] << " is not supported (yet)." << std::endl;
148                              return false;
149                          }
150                      }else {
# Line 152 | Line 161 | class SimplePreprocessor {
161          }
162      private:
163          
155        const static int bufferSize = 1024;
156        char buffer[bufferSize];
164   };
165  
166   }

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines