blob: 26c143a72c661af65109024363c7c7335a10cec8 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
/*
* $Id: Path390.hpp 568078 2007-08-21 11:43:25Z amassari $
*/
#ifndef PATH390_HPP
#define PATH390_HPP
#include <xercesc/util/XercesDefs.hpp>
XERCES_CPP_NAMESPACE_BEGIN
class Path390
{
public:
// Constructors and Destructor
Path390();
~Path390();
Path390(char *s);
// Set a new path in the object. This will overlay any existing path and
// re-initialize the object.
void setPath(char *s);
// This performs a complete parse of the path. It returns the error code or 0
// if there was no error.
int fullParse();
// This returns the path in a format as required by fopen
char * getfopenPath();
// This returns the parameters in a format as required by fopen
char * getfopenParms();
// This returns the type of the path. See the constants defined below.
int getPathType();
// This returns the error code that was found during the parse
int getError();
// Returns whether the path is relative or absolute
bool isRelative();
// Returns whether or not type=record shows up in the path.
bool isRecordType();
private:
int _pathtype;
char * _orgpath;
int _orglen;
char * _resultpath;
bool _absolute;
bool _uriabsolute;
bool _dsnabsolute;
char * _curpos;
int _parsestate;
int _numperiods;
int _numsemicolons;
int _error;
char * _orgparms;
int _orgparmlen;
char * _lastsemi;
char * _lastslash;
char * _lastparen;
char * _parmStart;
char * _pathEnd;
char * _extStart;
int _typerecord;
// internal only methods:
void _determine_uri_abs();
void _determine_type();
void _determine_punct();
void _determine_parms();
void _parse_rest();
};
// Internal constants for the _parsestate variable:
#define PARSE_NONE 0
#define PARSE_ABSOLUTE_URI 1
#define PARSE_PATHTYPE 2
#define PARSE_PUNCT 3
#define PARSE_PARMS 4
#define PARSE_PARSED 5
// These are the possible error return codes:
#define NO_ERROR 0
#define ERROR_SEMICOLON_NOT_ALLOWED 101
#define ERROR_PERIOD_NOT_ALLOWED 102
#define ERROR_NO_PAREN_ALLOWED 103
#define ERROR_ABS_PATH_REQUIRED 104
#define ERROR_NO_EXTRA_PERIODS_ALLOWED 105
#define ERROR_MUST_BE_ABSOLUTE 106
#define ERROR_BAD_DD 107
#define ERROR_BAD_DSN2 108
#define ERROR_NO_EXTRA_SEMIS_ALLOWED 109
// Constants for the _pathtype variable and the return value from getPathType() method:
#define PATH390_HFS 1
#define PATH390_DSN1 2 // format is dsn:/chrisl/data/xml/member1.
#define PATH390_DSN2 3 // format is dsn://'chrisl.data.xml(member1)'
#define PATH390_DD 4
#define PATH390_OTHER 5
XERCES_CPP_NAMESPACE_END
#endif