You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
106 lines
3.6 KiB
106 lines
3.6 KiB
///////////////////////////////////////////////////////////////////////////////
|
|
//
|
|
// The contents of this file are subject to the Mozilla Public License
|
|
// Version 1.1 (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.mozilla.org/MPL/
|
|
//
|
|
// Software distributed under the License is distributed on an "AS IS"
|
|
// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
|
|
// License for the specific language governing rights and limitations
|
|
// under the License.
|
|
//
|
|
// The Original Code is MP4v2.
|
|
//
|
|
// The Initial Developer of the Original Code is Kona Blend.
|
|
// Portions created by Kona Blend are Copyright (C) 2008.
|
|
// All Rights Reserved.
|
|
//
|
|
// Contributors:
|
|
// Kona Blend, kona8lend@@gmail.com
|
|
//
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
|
|
#ifndef MP4V2_UTIL_DATABASE_H
|
|
#define MP4V2_UTIL_DATABASE_H
|
|
|
|
namespace mp4v2 { namespace util {
|
|
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
///
|
|
/// Database class is the base implementation for persistent databases.
|
|
///
|
|
/// All databases use an ASCII file format:
|
|
/// @li leading/trailing spaces on any line are trimmed.
|
|
/// @li lines beginning with '#' are considered comments.
|
|
/// @li lines of { <NAME><DELIMITER><VALUE><EOL> } form NAME/VALUEs pairs.
|
|
/// @li <NAME> cannot contain any <DELIMITER> characters.
|
|
/// @li <DELIMITER> is any combination of { ' ', '=', '\t' }.
|
|
/// @li <VALUE> continues until <EOL>.
|
|
/// @li <EOL> is optional for last line.
|
|
/// @li <NAME> of value this._key marks the beginning of a new record.
|
|
/// @li <NAME> is case-insensitive.
|
|
/// @li subsequent lines of NAME/VALUE pairs are part of the same record.
|
|
///
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
class Database {
|
|
public:
|
|
virtual ~Database();
|
|
|
|
protected:
|
|
/// Constructor.
|
|
///
|
|
/// @param file specifies filename for IO operations.
|
|
/// @param key specifies the name of primary key.
|
|
///
|
|
Database( const string& file, const string& key );
|
|
|
|
/// Close database file.
|
|
void close();
|
|
|
|
/// Open database file.
|
|
///
|
|
/// @param write <b>true</b> to open file for writing, <b>false</b> for reading.
|
|
/// @param fname filename to open.
|
|
/// On Windows, this should be a UTF-8 encoded string.
|
|
/// On other platforms, it should be an 8-bit encoding that is
|
|
/// appropriate for the platform, locale, file system, etc.
|
|
/// (prefer to use UTF-8 when possible).
|
|
///
|
|
/// @return <b>true</b> on error.
|
|
///
|
|
bool open( bool write, string& fname );
|
|
|
|
/// Parse a record-data from open intput stream.
|
|
///
|
|
/// @param data is populated with NAME/VALUE pairs if any.
|
|
///
|
|
void parseData( map<string,string>& data );
|
|
|
|
///////////////////////////////////////////////////////////////////////////
|
|
|
|
const string _filename; // filename (basename only) used for database
|
|
const string _key; // name of key for record boundries
|
|
fstream _stream; // // IO object
|
|
|
|
private:
|
|
/// parse a name/value pair from open input stream.
|
|
///
|
|
/// @param name stores the parsed name.
|
|
/// @param value stores the parsed value.
|
|
///
|
|
/// @return <b>true</b> on error (no name/value pair was parised).
|
|
///
|
|
bool parsePair( string& name, string& value );
|
|
|
|
/*************************************************************************/
|
|
|
|
string _currentKeyValue;
|
|
};
|
|
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
|
|
}} // namespace mp4v2::util
|
|
|
|
#endif // MP4V2_UTIL_DATABASE_H
|