blob: fb2ccd84251aa6289d9777220e1f18c95edf6655 [file] [log] [blame]
// 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
// 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,
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 {
virtual ~Database();
/// 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( std::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
/// 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