summaryrefslogtreecommitdiffstats
path: root/debian/mp4v2/mp4v2-2.0.0~dfsg0/libutil/Database.h
diff options
context:
space:
mode:
Diffstat (limited to 'debian/mp4v2/mp4v2-2.0.0~dfsg0/libutil/Database.h')
-rw-r--r--debian/mp4v2/mp4v2-2.0.0~dfsg0/libutil/Database.h105
1 files changed, 105 insertions, 0 deletions
diff --git a/debian/mp4v2/mp4v2-2.0.0~dfsg0/libutil/Database.h b/debian/mp4v2/mp4v2-2.0.0~dfsg0/libutil/Database.h
new file mode 100644
index 00000000..9f96c3e2
--- /dev/null
+++ b/debian/mp4v2/mp4v2-2.0.0~dfsg0/libutil/Database.h
@@ -0,0 +1,105 @@
+///////////////////////////////////////////////////////////////////////////////
+//
+// 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