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 770 by tim, Fri Dec 2 15:38:03 2005 UTC vs.
Revision 1782 by gezelter, Wed Aug 22 02:28:28 2012 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, 24107 (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 44 | Line 45
45   #include <iostream>
46   #include <set>
47   #include <fstream>
48 + #include <sstream>
49   #include "utils/StringTokenizer.hpp"
50   #include "utils/Trim.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 <            
76 <            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 = 1024;
91 >            char buffer[bufferSize];
92 >            while(myStream.getline(buffer, bufferSize)) {
93                ++lineNo;
94                std::string line = trimLeftCopy(buffer);
95                if (!line.empty() && line[0] == '#') {
# Line 91 | Line 111 | class SimplePreprocessor {
111                              SimplePreprocessor subPreprocessor;
112                              std::string includeFilename = tokens[1];
113                              includeFilename = includeFilename.substr(1, includeFilename.length() -2);
114 <                            bool ret = subPreprocessor.doPreprocess(includeFilename, os, defineSet, ifStates);
114 >                            std::ifstream includeStream(includeFilename.c_str());
115 >                            if (!includeStream.is_open()) {
116 >                                std::stringstream ss;
117 >                                ss << "Can not open " << includeFilename << " for preprocessing\n";
118 >                                throw OpenMDException(ss.str());
119 >                            }
120 >                            
121 >                            bool ret = subPreprocessor.doPreprocess(includeStream, includeFilename, 1, os, defineSet, ifStates);
122                              if (!ret) {
123                                  std::cout << "Error in preprocessing\n";
124                                  return false;
# Line 118 | Line 145 | class SimplePreprocessor {
145                             }
146                             os << std::endl;
147                          } else {
148 <                            std::cout << tokens[0] << " is not support" << std::endl;
148 >                            std::cout << tokens[0] << " is not supported (yet)." << std::endl;
149                              return false;
150                          }
151                      }else {
# Line 135 | Line 162 | class SimplePreprocessor {
162          }
163      private:
164          
138        const static int bufferSize = 1024;
139        char buffer[bufferSize];
165   };
166  
167   }

Comparing trunk/src/mdParser/SimplePreprocessor.hpp (property svn:keywords):
Revision 770 by tim, Fri Dec 2 15:38:03 2005 UTC vs.
Revision 1782 by gezelter, Wed Aug 22 02:28:28 2012 UTC

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

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines