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 912 by tim, Thu Mar 23 14:59:14 2006 UTC vs.
Revision 2031 by jmichalk, Fri Oct 31 18:40:40 2014 UTC

# Line 6 | Line 6
6   * redistribute this software in source and binary code form, provided
7   * that the following conditions are met:
8   *
9 < * 1. Acknowledgement of the program authors must be made in any
10 < *    publication of scientific results based in part on use of the
11 < *    program.  An acceptable form of acknowledgement is citation of
12 < *    the article in which the program was described (Matthew
13 < *    A. Meineke, Charles F. Vardeman II, Teng Lin, Christopher
14 < *    J. Fennell and J. Daniel Gezelter, "OOPSE: An Object-Oriented
15 < *    Parallel Simulation Engine for Molecular Dynamics,"
16 < *    J. Comput. Chem. 26, pp. 252-271 (2005))
17 < *
18 < * 2. Redistributions of source code must retain the above copyright
9 > * 1. Redistributions of source code must retain the above copyright
10   *    notice, this list of conditions and the following disclaimer.
11   *
12 < * 3. Redistributions in binary form must reproduce the above copyright
12 > * 2. Redistributions in binary form must reproduce the above copyright
13   *    notice, this list of conditions and the following disclaimer in the
14   *    documentation and/or other materials provided with the
15   *    distribution.
# Line 37 | Line 28
28   * arising out of the use of or inability to use software, even if the
29   * University of Notre Dame has been advised of the possibility of
30   * such damages.
31 + *
32 + * SUPPORT OPEN SCIENCE!  If you use OpenMD or its source code in your
33 + * research, please cite the appropriate papers when you publish your
34 + * work.  Good starting points are:
35 + *                                                                      
36 + * [1]  Meineke, et al., J. Comp. Chem. 26, 252-271 (2005).            
37 + * [2]  Fennell & Gezelter, J. Chem. Phys. 124, 234104 (2006).          
38 + * [3]  Sun, Lin & Gezelter, J. Chem. Phys. 128, 234107 (2008).          
39 + * [4]  Kuang & Gezelter,  J. Chem. Phys. 133, 164101 (2010).
40 + * [5]  Vardeman, Stocker & Gezelter, J. Chem. Theory Comput. 7, 834 (2011).
41   */
42  
43   #ifndef MDPARSER_SIMPLEPREPROCESSOR_HPP
# Line 47 | Line 48
48   #include <sstream>
49   #include "utils/StringTokenizer.hpp"
50   #include "utils/Trim.hpp"
51 < #include "utils/OOPSEException.hpp"
51 > #include "utils/OpenMDException.hpp"
52 > #include "utils/simError.h"
53  
54 +
55   /**
56   * @class SimplePreprocessor
57   * @brief A simple preprocessor.
58 < * @note only support #include #ifdef, #ifndef, #endif, #define and #undef, c-like multiple line
59 < *  comment is not support, macro substitude is not support.
58 > * @note only supports \#include \#ifdef, \#ifndef, \#endif, \#define and \#undef, c-like multiple line
59 > *  comment is not supported, macro substitute is not supported.
60   */
61 < namespace oopse {
61 > namespace OpenMD {
62   class SimplePreprocessor {
63      public:
64 <        bool preprocess(const std::string& filename, ostream& os) {
64 >        bool preprocess(std::istream& myStream, const std::string& filename, int startingLine, ostream& os) {
65              std::set<std::string> defineSet;
66              std::stack<bool> ifStates;
67  
68              ifStates.push(true);
69 <            return doPreprocess(filename, os, defineSet, ifStates);
69 >            return doPreprocess(myStream, filename, startingLine, os, defineSet, ifStates);
70          }
71          
72      private:
73 <        bool doPreprocess(const std::string& filename, ostream& os, std::set<std::string>& defineSet, std::stack<bool>& ifStates) {
74 <            std::ifstream input(filename.c_str());
75 <            if (!input.is_open()) {
76 <                std::stringstream ss;
77 <                ss << "Can not open " << filename << " for preprocessing\n";
78 <                throw OOPSEException(ss.str());                
79 <            }
80 <            int lineNo =1;
73 >        bool doPreprocess(std::istream& myStream, const std::string& filename, int startingLine, ostream& os, std::set<std::string>& defineSet, std::stack<bool>& ifStates) {
74 >            //std::ifstream input(filename.c_str());
75 >            //if (!input.is_open()) {
76 >            //    std::stringstream ss;
77 >            //    ss << "Can not open " << filename << " for preprocessing\n";
78 >            //    
79 >            //    sprintf(painCave.errMsg,
80 >            //            "Can not open (%s) for processing. \n"
81 >            //            "\tPlease check md file name syntax.\n", filename.c_str());
82 >            //    
83 >            //    painCave.isFatal = 1;
84 >            //    simError();
85 >            //    
86 >            //    throw OpenMDException(ss.str());                
87 >            //}
88 >            int lineNo = startingLine;
89              os << "#line " << lineNo << " \"" << filename << "\"\n";
90 <            while(input.getline(buffer, bufferSize)) {
90 >            const int bufferSize = 8192;
91 >            char buffer[bufferSize];
92 >            while(myStream.getline(buffer, bufferSize)) {
93                ++lineNo;
94                std::string line = trimLeftCopy(buffer);
95                if (!line.empty() && line[0] == '#') {
96                      StringTokenizer tokenizer(line.substr(1, line.length()));
97                      std::vector<std::string> tokens = tokenizer.getAllTokens();
98 <                    if (tokens.size() < 1 ) {
98 >                    if (tokens.empty()) {
99                          return false;
100                      }
88                    std::string keyword = tokens[0];
101                      if (tokens[0] == "endif") {
102                          ifStates.pop();
103                          if (ifStates.empty()) {
# Line 98 | 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 " << includeFilename << " for preprocessing\n";
117 >                                throw OpenMDException(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 125 | 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 142 | Line 161 | class SimplePreprocessor {
161          }
162      private:
163          
145        const static int bufferSize = 1024;
146        char buffer[bufferSize];
164   };
165  
166   }

Comparing trunk/src/mdParser/SimplePreprocessor.hpp (property svn:keywords):
Revision 912 by tim, Thu Mar 23 14:59:14 2006 UTC vs.
Revision 2031 by jmichalk, Fri Oct 31 18:40:40 2014 UTC

# Line 0 | Line 1
1 + Author Id Revision Date

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines