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 938 by gezelter, Mon Apr 17 21:49:12 2006 UTC vs.
Revision 1442 by gezelter, Mon May 10 17:28:26 2010 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]  Vardeman & Gezelter, in progress (2009).                        
40   */
41  
42   #ifndef MDPARSER_SIMPLEPREPROCESSOR_HPP
# Line 47 | Line 47
47   #include <sstream>
48   #include "utils/StringTokenizer.hpp"
49   #include "utils/Trim.hpp"
50 < #include "utils/OOPSEException.hpp"
50 > #include "utils/OpenMDException.hpp"
51   #include "utils/simError.h"
52  
53  
# Line 57 | Line 57
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 {
60 > namespace OpenMD {
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 OpenMDException(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 " << 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 152 | Line 161 | class SimplePreprocessor {
161          }
162      private:
163          
155        const static int bufferSize = 1024;
156        char buffer[bufferSize];
164   };
165  
166   }

Comparing trunk/src/mdParser/SimplePreprocessor.hpp (property svn:keywords):
Revision 938 by gezelter, Mon Apr 17 21:49:12 2006 UTC vs.
Revision 1442 by gezelter, Mon May 10 17:28:26 2010 UTC

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

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines