![]() ![]() |
![]() |
1 mike 1.1.2.1 //%///////////////////////////////////////////////////////////////////////////// 2 // 3 // Copyright (c) 2000, 2001 BMC Software, Hewlett-Packard Company, IBM, 4 // The Open Group, Tivoli Systems 5 // 6 // Permission is hereby granted, free of charge, to any person obtaining a copy 7 // of this software and associated documentation files (the "Software"), to 8 // deal in the Software without restriction, including without limitation the 9 // rights to use, copy, modify, merge, publish, distribute, sublicense, and/or 10 // sell copies of the Software, and to permit persons to whom the Software is 11 // furnished to do so, subject to the following conditions: 12 // 13 // THE ABOVE COPYRIGHT NOTICE AND THIS PERMISSION NOTICE SHALL BE INCLUDED IN 14 // ALL COPIES OR SUBSTANTIAL PORTIONS OF THE SOFTWARE. THE SOFTWARE IS PROVIDED 15 // "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT 16 // LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR 17 // PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT 18 // HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN 19 // ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION 20 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 21 // 22 mike 1.1.2.1 //============================================================================== 23 // 24 // Author: Mike Brasher (mbrasher@bmc.com) 25 // 26 // Modified By: 27 // 28 //%///////////////////////////////////////////////////////////////////////////// 29 30 #include <Pegasus/Common/Config.h> | ||
31 mike 1.1.2.6 #include <Pegasus/Common/Exception.h> | ||
32 mike 1.1.2.1 #include <iostream> 33 #include "WQLParser.h" | ||
34 mike 1.1.2.5 #include "WQLParserState.h" | ||
35 mike 1.1.2.1 | ||
36 mike 1.1.2.2 PEGASUS_USING_STD; 37 38 extern int WQL_parse(); 39 | ||
40 mike 1.1.2.1 PEGASUS_NAMESPACE_BEGIN 41 | ||
42 mike 1.1.2.5 WQLParserState* globalParserState = 0; | ||
43 mike 1.1.2.1 | ||
44 mike 1.1.2.5 void WQLParser::parse( 45 const Array<Sint8>& text, 46 WQLSelectStatement& statement) | ||
47 mike 1.1.2.2 { | ||
48 mike 1.1.2.3 // ATTN: raise error here: 49 50 if (text.size() == 0 || text[text.size() - 1] != '\0') | ||
51 mike 1.1.2.6 throw MissingNullTerminator(); | ||
52 mike 1.1.2.3 | ||
53 mike 1.1.2.5 globalParserState = new WQLParserState; 54 globalParserState->error = false; 55 globalParserState->text = text; 56 globalParserState->offset = 0; 57 globalParserState->statement = &statement; 58 | ||
59 mike 1.1.2.2 WQL_parse(); | ||
60 mike 1.1.2.5 | ||
61 mike 1.1.2.6 if (globalParserState->error) 62 { 63 String errorMessage = globalParserState->errorMessage; 64 delete globalParserState; 65 throw ParseError(errorMessage); 66 } 67 | ||
68 mike 1.1.2.5 delete globalParserState; | ||
69 mike 1.1.2.1 } 70 71 PEGASUS_NAMESPACE_END | ||
72 mike 1.1.2.2 73 PEGASUS_USING_PEGASUS; | ||
74 mike 1.1.2.6 75 int WQL_error(char* errorMessage) 76 { 77 globalParserState->error = true; 78 globalParserState->errorMessage = errorMessage; 79 return -1; 80 } | ||
81 mike 1.1.2.2 82 int WQLInput(char* buffer, int& numRead, int numRequested) 83 { | ||
84 mike 1.1.2.3 // 85 // Be sure to account for the null terminator (the size of the text will 86 // be one or more; this is fixed checked beforehand by WQLParser::parse()). 87 // 88 | ||
89 mike 1.1.2.5 int remaining = 90 globalParserState->text.size() - globalParserState->offset - 1; | ||
91 mike 1.1.2.2 92 if (remaining == 0) 93 { 94 numRead = 0; 95 return 0; 96 } 97 98 if (remaining < numRequested) 99 numRequested = remaining; 100 | ||
101 mike 1.1.2.5 memcpy(buffer, 102 globalParserState->text.getData() + globalParserState->offset, 103 numRequested); 104 105 globalParserState->offset += numRequested; | ||
106 mike 1.1.2.2 numRead = numRequested; 107 108 return numRead; 109 } |
No CVS admin address has been configured |
Powered by ViewCVS 0.9.2 |