[Scummvm-cvs-logs] SF.net SVN: scummvm:[35578] scummvm/trunk

fingolfin at users.sourceforge.net fingolfin at users.sourceforge.net
Sat Dec 27 19:03:37 CET 2008


Revision: 35578
          http://scummvm.svn.sourceforge.net/scummvm/?rev=35578&view=rev
Author:   fingolfin
Date:     2008-12-27 18:03:27 +0000 (Sat, 27 Dec 2008)

Log Message:
-----------
Turned FSNode into a ArchiveMember subclass; removed the now obsolete FSDirectoryMember; moved FSDirectory from common/archive.h to common/fs.h

Modified Paths:
--------------
    scummvm/trunk/common/archive.cpp
    scummvm/trunk/common/archive.h
    scummvm/trunk/common/fs.h
    scummvm/trunk/common/xmlparser.cpp
    scummvm/trunk/graphics/imageman.cpp

Modified: scummvm/trunk/common/archive.cpp
===================================================================
--- scummvm/trunk/common/archive.cpp	2008-12-27 18:01:19 UTC (rev 35577)
+++ scummvm/trunk/common/archive.cpp	2008-12-27 18:03:27 UTC (rev 35578)
@@ -65,30 +65,6 @@
 	return matches;
 }
 
-/**
- *  FSDirectoryMemeber is the implementation of ArchiveMember used by
- *  by FSDirectory. It is right now a light wrapper or FSNode.
- */
-class FSDirectoryMember : public ArchiveMember {
-	FSNode	_node;
-
-public:
-	FSDirectoryMember(FSNode &node) : _node(node) {
-	}
-
-	String getName() const {
-		return _node.getName();
-	}
-
-	String getDisplayName() const {
-		return _node.getPath();
-	}
-
-	SeekableReadStream *open() {
-		return _node.openForReading();
-	}
-};
-
 FSDirectory::FSDirectory(const FSNode &node, int depth)
   : _node(node), _cached(false), _depth(depth) {
 }
@@ -157,7 +133,7 @@
 		return ArchiveMemberPtr();
 	}
 
-	return ArchiveMemberPtr(new FSDirectoryMember(node));
+	return ArchiveMemberPtr(new FSNode(node));
 }
 
 SeekableReadStream *FSDirectory::openFile(const String &name) {
@@ -299,7 +275,7 @@
 	NodeCache::iterator it = _fileCache.begin();
 	for ( ; it != _fileCache.end(); ++it) {
 		if (matchPath(it->_key.c_str(), lowercasePattern.c_str())) {
-			list.push_back(ArchiveMemberPtr(new FSDirectoryMember(it->_value)));
+			list.push_back(ArchiveMemberPtr(new FSNode(it->_value)));
 			matches++;
 		}
 	}
@@ -315,7 +291,7 @@
 
 	int files = 0;
 	for (NodeCache::iterator it = _fileCache.begin(); it != _fileCache.end(); ++it) {
-		list.push_back(ArchiveMemberPtr(new FSDirectoryMember(it->_value)));
+		list.push_back(ArchiveMemberPtr(new FSNode(it->_value)));
 		++files;
 	}
 

Modified: scummvm/trunk/common/archive.h
===================================================================
--- scummvm/trunk/common/archive.h	2008-12-27 18:01:19 UTC (rev 35577)
+++ scummvm/trunk/common/archive.h	2008-12-27 18:03:27 UTC (rev 35578)
@@ -23,19 +23,22 @@
  *
  */
 
-#ifndef COMMON_ARCHIVES_H
-#define COMMON_ARCHIVES_H
+#ifndef COMMON_ARCHIVE_H
+#define COMMON_ARCHIVE_H
 
-#include "common/fs.h"
+//#include "common/fs.h"
 #include "common/str.h"
 #include "common/hash-str.h"
 #include "common/list.h"
 #include "common/ptr.h"
 #include "common/singleton.h"
-#include "common/stream.h"
 
 namespace Common {
 
+class FSNode;
+class SeekableReadStream;
+
+
 /**
  * ArchiveMember is an abstract interface to represent elements inside
  * implementations of Archive.
@@ -122,116 +125,6 @@
 
 
 /**
- * FSDirectory models a directory tree from the filesystem and allows users
- * to access it through the Archive interface. Searching is case-insensitive,
- * since the intended goal is supporting retrieval of game data.
- *
- * FSDirectory can represent a single directory, or a tree with specified depth,
- * depending on the value passed to the 'depth' parameter in the constructors.
- * Filenames are cached with their relative path, with elements separated by
- * backslashes, e.g.:
- *
- * c:\my\data\file.ext
- *
- * would be cached as 'data/file.ext' if FSDirectory was created on 'c:/my' with
- * depth > 1. If depth was 1, then the 'data' subdirectory would have been
- * ignored, instead.
- * Again, only BACKSLASHES are used as separators independently from the
- * underlying file system.
- *
- * Relative paths can be specified when calling matching functions like openFile(),
- * hasFile(), listMatchingMembers() and listMembers(). Please see the function
- * specific comments for more information.
- *
- * Client code can customize cache by using the constructors with the 'prefix'
- * parameter. In this case, the prefix is prepended to each entry in the cache,
- * and effectively treated as a 'virtual' parent subdirectory. FSDirectory adds
- * a trailing backslash to prefix if needed. Following on with the previous example
- * and using 'your' as prefix, the cache entry would have been 'your/data/file.ext'.
- *
- */
-class FSDirectory : public Archive {
-	FSNode	_node;
-
-	// Caches are case insensitive, clashes are dealt with when creating
-	// Key is stored in lowercase.
-	typedef HashMap<String, FSNode, IgnoreCase_Hash, IgnoreCase_EqualTo> NodeCache;
-	NodeCache	_fileCache, _subDirCache;
-	Common::String	_prefix;	// string that is prepended to each cache item key
-	void setPrefix(const String &prefix);
-
-	// look for a match
-	FSNode lookupCache(NodeCache &cache, const String &name);
-
-	// cache management
-	void cacheDirectoryRecursive(FSNode node, int depth, const String& prefix);
-	// fill cache if not already cached
-	void ensureCached();
-	bool _cached;
-	int	_depth;
-
-public:
-	/**
-	 * Create a FSDirectory representing a tree with the specified depth. Will result in an
-	 * unbound FSDirectory if name is not found on the filesystem or if the node is not a
-	 * valid directory.
-	 */
-	FSDirectory(const String &name, int depth = 1);
-	FSDirectory(const FSNode &node, int depth = 1);
-
-	/**
-	 * Create a FSDirectory representing a tree with the specified depth. The parameter
-	 * prefix is prepended to the keys in the cache. See class comment.
-	 */
-	FSDirectory(const String &prefix, const String &name, int depth = 1);
-	FSDirectory(const String &prefix, const FSNode &node, int depth = 1);
-
-	virtual ~FSDirectory();
-
-	/**
-	 * This return the underlying FSNode of the FSDirectory.
-	 */
-	FSNode getFSNode() const;
-
-	/**
-	 * Create a new FSDirectory pointing to a sub directory of the instance. See class comment
-	 * for an explanation of the prefix parameter.
-	 * @return a new FSDirectory instance
-	 */
-	FSDirectory *getSubDirectory(const String &name, int depth = 1);
-	FSDirectory *getSubDirectory(const String &prefix, const String &name, int depth = 1);
-
-	/**
-	 * Checks for existence in the cache. A full match of relative path and filename is needed
-	 * for success.
-	 */
-	virtual bool hasFile(const String &name);
-
-	/**
-	 * Returns a list of matching file names. Pattern can use GLOB wildcards.
-	 */
-	virtual int listMatchingMembers(ArchiveMemberList &list, const String &pattern);
-
-	/**
-	 * Returns a list of all the files in the cache.
-	 */
-	virtual int listMembers(ArchiveMemberList &list);
-
-	/**
-	 * Get a ArchiveMember representation of the specified file. A full match of relative
-	 * path and filename is needed for success.
-	 */
-	virtual ArchiveMemberPtr getMember(const String &name);
-
-	/**
-	 * Open the specified file. A full match of relative path and filename is needed
-	 * for success.
-	 */
-	virtual SeekableReadStream *openFile(const String &name);
-};
-
-
-/**
  * SearchSet enables access to a group of Archives through the Archive interface.
  * Its intended usage is a situation in which there are no name clashes among names in the
  * contained Archives, hence the simplistic policy of always looking for the first

Modified: scummvm/trunk/common/fs.h
===================================================================
--- scummvm/trunk/common/fs.h	2008-12-27 18:01:19 UTC (rev 35577)
+++ scummvm/trunk/common/fs.h	2008-12-27 18:03:27 UTC (rev 35578)
@@ -26,6 +26,7 @@
 #define COMMON_FS_H
 
 #include "common/array.h"
+#include "common/archive.h"
 #include "common/ptr.h"
 #include "common/str.h"
 
@@ -42,7 +43,7 @@
  * This is subclass instead of just a typedef so that we can use forward
  * declarations of it in other places.
  */
-class FSList : public Common::Array<FSNode> {};
+class FSList : public Array<FSNode> {};
 
 /**
  * FSNode, short for "File System Node", provides an abstraction for file
@@ -54,9 +55,9 @@
  * paths (and it's left to them whether / or \ or : is the path separator :-);
  * but it is also possible to use inodes or vrefs (MacOS 9) or anything else.
  */
-class FSNode {
+class FSNode : public ArchiveMember {
 private:
-	Common::SharedPtr<AbstractFSNode>	_realNode;
+	SharedPtr<AbstractFSNode>	_realNode;
 	FSNode(AbstractFSNode *realNode);
 
 public:
@@ -85,7 +86,7 @@
 	 * operating system doesn't support the concept), some other directory is
 	 * used (usually the root directory).
 	 */
-	explicit FSNode(const Common::String &path);
+	explicit FSNode(const String &path);
 
 	virtual ~FSNode() {}
 
@@ -119,7 +120,7 @@
 	 * @param name	the name of a child of this directory
 	 * @return the node referring to the child with the given name
 	 */
-	FSNode getChild(const Common::String &name) const;
+	FSNode getChild(const String &name) const;
 
 	/**
 	 * Return a list of all child nodes of this directory node. If called on a node
@@ -136,7 +137,7 @@
 	 *
 	 * @return the display name
 	 */
-	virtual Common::String getDisplayName() const;
+	virtual String getDisplayName() const;
 
 	/**
 	 * Return a string representation of the name of the file. This is can be
@@ -146,7 +147,7 @@
 	 *
 	 * @return the file name
 	 */
-	virtual Common::String getName() const;
+	virtual String getName() const;
 
 	/**
 	 * Return a string representation of the file which is suitable for
@@ -160,7 +161,7 @@
 	 *
 	 * @return the 'path' represented by this filesystem node
 	 */
-	virtual Common::String getPath() const;
+	virtual String getPath() const;
 
 	/**
 	 * Get the parent node of this node. If this node has no parent node,
@@ -212,7 +213,7 @@
 	 *
 	 * @return pointer to the stream object, 0 in case of a failure
 	 */
-	virtual Common::SeekableReadStream *openForReading() const;
+	virtual SeekableReadStream *openForReading() const;
 
 	/**
 	 * Creates a WriteStream instance corresponding to the file
@@ -221,9 +222,124 @@
 	 *
 	 * @return pointer to the stream object, 0 in case of a failure
 	 */
-	virtual Common::WriteStream *openForWriting() const;
+	virtual WriteStream *openForWriting() const;
+	
+	// Compatibility with ArchiveMember API.
+	SeekableReadStream *open() {
+		return openForReading();
+	}
 };
 
+/**
+ * FSDirectory models a directory tree from the filesystem and allows users
+ * to access it through the Archive interface. Searching is case-insensitive,
+ * since the intended goal is supporting retrieval of game data.
+ *
+ * FSDirectory can represent a single directory, or a tree with specified depth,
+ * depending on the value passed to the 'depth' parameter in the constructors.
+ * Filenames are cached with their relative path, with elements separated by
+ * backslashes, e.g.:
+ *
+ * c:\my\data\file.ext
+ *
+ * would be cached as 'data/file.ext' if FSDirectory was created on 'c:/my' with
+ * depth > 1. If depth was 1, then the 'data' subdirectory would have been
+ * ignored, instead.
+ * Again, only BACKSLASHES are used as separators independently from the
+ * underlying file system.
+ *
+ * Relative paths can be specified when calling matching functions like openFile(),
+ * hasFile(), listMatchingMembers() and listMembers(). Please see the function
+ * specific comments for more information.
+ *
+ * Client code can customize cache by using the constructors with the 'prefix'
+ * parameter. In this case, the prefix is prepended to each entry in the cache,
+ * and effectively treated as a 'virtual' parent subdirectory. FSDirectory adds
+ * a trailing backslash to prefix if needed. Following on with the previous example
+ * and using 'your' as prefix, the cache entry would have been 'your/data/file.ext'.
+ *
+ */
+class FSDirectory : public Archive {
+	FSNode	_node;
+
+	// Caches are case insensitive, clashes are dealt with when creating
+	// Key is stored in lowercase.
+	typedef HashMap<String, FSNode, IgnoreCase_Hash, IgnoreCase_EqualTo> NodeCache;
+	NodeCache	_fileCache, _subDirCache;
+	String	_prefix;	// string that is prepended to each cache item key
+	void setPrefix(const String &prefix);
+
+	// look for a match
+	FSNode lookupCache(NodeCache &cache, const String &name);
+
+	// cache management
+	void cacheDirectoryRecursive(FSNode node, int depth, const String& prefix);
+	// fill cache if not already cached
+	void ensureCached();
+	bool _cached;
+	int	_depth;
+
+public:
+	/**
+	 * Create a FSDirectory representing a tree with the specified depth. Will result in an
+	 * unbound FSDirectory if name is not found on the filesystem or if the node is not a
+	 * valid directory.
+	 */
+	FSDirectory(const String &name, int depth = 1);
+	FSDirectory(const FSNode &node, int depth = 1);
+
+	/**
+	 * Create a FSDirectory representing a tree with the specified depth. The parameter
+	 * prefix is prepended to the keys in the cache. See class comment.
+	 */
+	FSDirectory(const String &prefix, const String &name, int depth = 1);
+	FSDirectory(const String &prefix, const FSNode &node, int depth = 1);
+
+	virtual ~FSDirectory();
+
+	/**
+	 * This return the underlying FSNode of the FSDirectory.
+	 */
+	FSNode getFSNode() const;
+
+	/**
+	 * Create a new FSDirectory pointing to a sub directory of the instance. See class comment
+	 * for an explanation of the prefix parameter.
+	 * @return a new FSDirectory instance
+	 */
+	FSDirectory *getSubDirectory(const String &name, int depth = 1);
+	FSDirectory *getSubDirectory(const String &prefix, const String &name, int depth = 1);
+
+	/**
+	 * Checks for existence in the cache. A full match of relative path and filename is needed
+	 * for success.
+	 */
+	virtual bool hasFile(const String &name);
+
+	/**
+	 * Returns a list of matching file names. Pattern can use GLOB wildcards.
+	 */
+	virtual int listMatchingMembers(ArchiveMemberList &list, const String &pattern);
+
+	/**
+	 * Returns a list of all the files in the cache.
+	 */
+	virtual int listMembers(ArchiveMemberList &list);
+
+	/**
+	 * Get a ArchiveMember representation of the specified file. A full match of relative
+	 * path and filename is needed for success.
+	 */
+	virtual ArchiveMemberPtr getMember(const String &name);
+
+	/**
+	 * Open the specified file. A full match of relative path and filename is needed
+	 * for success.
+	 */
+	virtual SeekableReadStream *openFile(const String &name);
+};
+
+
 } // End of namespace Common
 
 #endif //COMMON_FS_H

Modified: scummvm/trunk/common/xmlparser.cpp
===================================================================
--- scummvm/trunk/common/xmlparser.cpp	2008-12-27 18:01:19 UTC (rev 35577)
+++ scummvm/trunk/common/xmlparser.cpp	2008-12-27 18:03:27 UTC (rev 35578)
@@ -26,6 +26,7 @@
 #include "common/xmlparser.h"
 #include "common/util.h"
 #include "common/archive.h"
+#include "common/fs.h"
 
 namespace Common {
 

Modified: scummvm/trunk/graphics/imageman.cpp
===================================================================
--- scummvm/trunk/graphics/imageman.cpp	2008-12-27 18:01:19 UTC (rev 35577)
+++ scummvm/trunk/graphics/imageman.cpp	2008-12-27 18:03:27 UTC (rev 35578)
@@ -26,6 +26,7 @@
 #include "graphics/imageman.h"
 #include "graphics/surface.h"
 
+#include "common/fs.h"
 #include "common/unzip.h"
 
 DECLARE_SINGLETON(Graphics::ImageManager);


This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.




More information about the Scummvm-git-logs mailing list