diff options
| author | Matthew Hoops | 2011-08-07 20:11:27 -0400 | 
|---|---|---|
| committer | Matthew Hoops | 2011-08-07 20:11:27 -0400 | 
| commit | c05c42ecc60c8f928628787272743f169a0d5903 (patch) | |
| tree | f2b06be630676b7302a1fb62940099b2ec71442d /common | |
| parent | e43a6671fc04f2c67b8efa2c0fdfdd6ec0ea1023 (diff) | |
| parent | 45dc303159d5bbe77a351df31e6f2d2f97a3412d (diff) | |
| download | scummvm-rg350-c05c42ecc60c8f928628787272743f169a0d5903.tar.gz scummvm-rg350-c05c42ecc60c8f928628787272743f169a0d5903.tar.bz2 scummvm-rg350-c05c42ecc60c8f928628787272743f169a0d5903.zip  | |
Merge remote branch 'upstream/master' into soccer
Diffstat (limited to 'common')
44 files changed, 354 insertions, 189 deletions
diff --git a/common/EventDispatcher.cpp b/common/EventDispatcher.cpp index e97068c0d0..ce1ef0c1c8 100644 --- a/common/EventDispatcher.cpp +++ b/common/EventDispatcher.cpp @@ -28,12 +28,12 @@ EventDispatcher::EventDispatcher() : _mapper(0) {  }  EventDispatcher::~EventDispatcher() { -	for (Common::List<SourceEntry>::iterator i = _sources.begin(); i != _sources.end(); ++i) { +	for (List<SourceEntry>::iterator i = _sources.begin(); i != _sources.end(); ++i) {  		if (i->autoFree)  			delete i->source;  	} -	for (Common::List<ObserverEntry>::iterator i = _observers.begin(); i != _observers.end(); ++i) { +	for (List<ObserverEntry>::iterator i = _observers.begin(); i != _observers.end(); ++i) {  		if (i->autoFree)  			delete i->observer;  	} @@ -43,9 +43,9 @@ EventDispatcher::~EventDispatcher() {  }  void EventDispatcher::dispatch() { -	Common::Event event; +	Event event; -	for (Common::List<SourceEntry>::iterator i = _sources.begin(); i != _sources.end(); ++i) { +	for (List<SourceEntry>::iterator i = _sources.begin(); i != _sources.end(); ++i) {  		const bool allowMapping = i->source->allowMapping();  		while (i->source->pollEvent(event)) { @@ -83,7 +83,7 @@ void EventDispatcher::registerSource(EventSource *source, bool autoFree) {  }  void EventDispatcher::unregisterSource(EventSource *source) { -	for (Common::List<SourceEntry>::iterator i = _sources.begin(); i != _sources.end(); ++i) { +	for (List<SourceEntry>::iterator i = _sources.begin(); i != _sources.end(); ++i) {  		if (i->source == source) {  			if (i->autoFree)  				delete source; @@ -101,7 +101,7 @@ void EventDispatcher::registerObserver(EventObserver *obs, uint priority, bool a  	newEntry.priority = priority;  	newEntry.autoFree = autoFree; -	for (Common::List<ObserverEntry>::iterator i = _observers.begin(); i != _observers.end(); ++i) { +	for (List<ObserverEntry>::iterator i = _observers.begin(); i != _observers.end(); ++i) {  		if (i->priority < priority) {  			_observers.insert(i, newEntry);  			return; @@ -112,7 +112,7 @@ void EventDispatcher::registerObserver(EventObserver *obs, uint priority, bool a  }  void EventDispatcher::unregisterObserver(EventObserver *obs) { -	for (Common::List<ObserverEntry>::iterator i = _observers.begin(); i != _observers.end(); ++i) { +	for (List<ObserverEntry>::iterator i = _observers.begin(); i != _observers.end(); ++i) {  		if (i->observer == obs) {  			if (i->autoFree)  				delete obs; @@ -124,11 +124,10 @@ void EventDispatcher::unregisterObserver(EventObserver *obs) {  }  void EventDispatcher::dispatchEvent(const Event &event) { -	for (Common::List<ObserverEntry>::iterator i = _observers.begin(); i != _observers.end(); ++i) { +	for (List<ObserverEntry>::iterator i = _observers.begin(); i != _observers.end(); ++i) {  		if (i->observer->notifyEvent(event))  			break;  	}  }  } // End of namespace Common - diff --git a/common/EventRecorder.cpp b/common/EventRecorder.cpp index 4441070050..201043f52e 100644 --- a/common/EventRecorder.cpp +++ b/common/EventRecorder.cpp @@ -304,6 +304,10 @@ void EventRecorder::processMillis(uint32 &millis) {  	g_system->unlockMutex(_timeMutex);  } +bool EventRecorder::processDelayMillis(uint &msecs) { +	return false; +} +  bool EventRecorder::notifyEvent(const Event &ev) {  	if (_recordMode != kRecorderRecord)  		return false; @@ -360,4 +364,3 @@ bool EventRecorder::pollEvent(Event &ev) {  }  } // End of namespace Common - diff --git a/common/EventRecorder.h b/common/EventRecorder.h index 8377d9e8bd..e20419695a 100644 --- a/common/EventRecorder.h +++ b/common/EventRecorder.h @@ -56,6 +56,9 @@ public:  	/** TODO: Add documentation, this is only used by the backend */  	void processMillis(uint32 &millis); +	/** TODO: Add documentation, this is only used by the backend */ +	bool processDelayMillis(uint &msecs); +  private:  	bool notifyEvent(const Event &ev);  	bool pollEvent(Event &ev); @@ -103,4 +106,3 @@ private:  } // End of namespace Common  #endif - diff --git a/common/algorithm.h b/common/algorithm.h index 00c0e1c98f..e7ccef4840 100644 --- a/common/algorithm.h +++ b/common/algorithm.h @@ -226,12 +226,12 @@ void sort(T first, T last, StrictWeakOrdering comp) {   */  template<typename T>  void sort(T *first, T *last) { -	sort(first, last, Common::Less<T>()); +	sort(first, last, Less<T>());  }  template<class T>  void sort(T first, T last) { -	sort(first, last, Common::Less<typename T::ValueType>()); +	sort(first, last, Less<typename T::ValueType>());  }  // MSVC is complaining about the minus operator being applied to an unsigned type @@ -269,4 +269,3 @@ T gcd(T a, T b) {  } // End of namespace Common  #endif - diff --git a/common/archive.cpp b/common/archive.cpp index 102d7aaa3f..954de8bcaa 100644 --- a/common/archive.cpp +++ b/common/archive.cpp @@ -147,7 +147,7 @@ void SearchSet::addSubDirectoriesMatching(const FSNode &directory, String origPa  	for (FSList::const_iterator i = subDirs.begin(); i != subDirs.end(); ++i) {  		String name = i->getName(); -		if (Common::matchString(name.c_str(), pattern.c_str(), ignoreCase)) { +		if (matchString(name.c_str(), pattern.c_str(), ignoreCase)) {  			matchIter = multipleMatches.find(name);  			if (matchIter == multipleMatches.end()) {  				multipleMatches[name] = true; @@ -288,4 +288,3 @@ void SearchManager::clear() {  DECLARE_SINGLETON(SearchManager);  } // namespace Common - diff --git a/common/archive.h b/common/archive.h index 8400c56d69..c8e78f9bc8 100644 --- a/common/archive.h +++ b/common/archive.h @@ -254,7 +254,7 @@ public:  	virtual void clear();  private: -	friend class Common::Singleton<SingletonBaseType>; +	friend class Singleton<SingletonBaseType>;  	SearchManager();  }; diff --git a/common/array.h b/common/array.h index e5434091fb..18cecfb98f 100644 --- a/common/array.h +++ b/common/array.h @@ -42,7 +42,7 @@ namespace Common {   * management scheme. There, only elements that 'live' are actually constructed   * (i.e., have their constructor called), and objects that are removed are   * immediately destructed (have their destructor called). - * With Common::Array, this is not the case; instead, it simply uses new[] and + * With Array, this is not the case; instead, it simply uses new[] and   * delete[] to allocate whole blocks of objects, possibly more than are   * currently 'alive'. This simplifies memory management, but may have   * undesirable side effects when one wants to use an Array of complex @@ -274,7 +274,7 @@ protected:  		if (capacity) {  			_storage = new T[capacity];  			if (!_storage) -				::error("Common::Array: failure to allocate %d bytes", capacity); +				::error("Common::Array: failure to allocate %u bytes", capacity * (uint)sizeof(T));  		} else {  			_storage = 0;  		} diff --git a/common/config-file.cpp b/common/config-file.cpp index ea3feff8ae..1ebd9b5701 100644 --- a/common/config-file.cpp +++ b/common/config-file.cpp @@ -36,7 +36,7 @@ namespace Common {   * underscores. In particular, white space and "#", "=", "[", "]"   * are not valid!   */ -bool ConfigFile::isValidName(const Common::String &name) { +bool ConfigFile::isValidName(const String &name) {  	const char *p = name.c_str();  	while (*p && (isalnum(static_cast<unsigned char>(*p)) || *p == '-' || *p == '_' || *p == '.'))  		p++; diff --git a/common/config-file.h b/common/config-file.h index d28ad34036..7bc5604b4c 100644 --- a/common/config-file.h +++ b/common/config-file.h @@ -93,7 +93,7 @@ public:  	 * underscores. In particular, white space and "#", "=", "[", "]"  	 * are not valid!  	 */ -	static bool isValidName(const Common::String &name); +	static bool isValidName(const String &name);  	/** Reset everything stored in this config file. */  	void	clear(); diff --git a/common/config-manager.cpp b/common/config-manager.cpp index fbdb611f3c..c62dee8bea 100644 --- a/common/config-manager.cpp +++ b/common/config-manager.cpp @@ -38,11 +38,11 @@ namespace Common {  DECLARE_SINGLETON(ConfigManager); -const char *ConfigManager::kApplicationDomain = "scummvm"; -const char *ConfigManager::kTransientDomain = "__TRANSIENT"; +char const *const ConfigManager::kApplicationDomain = "scummvm"; +char const *const ConfigManager::kTransientDomain = "__TRANSIENT";  #ifdef ENABLE_KEYMAPPER -const char *ConfigManager::kKeymapperDomain = "keymapper"; +char const *const ConfigManager::kKeymapperDomain = "keymapper";  #endif  #pragma mark - @@ -112,7 +112,7 @@ void ConfigManager::loadConfigFile(const String &filename) {   * Add a ready-made domain based on its name and contents   * The domain name should not already exist in the ConfigManager.   **/ -void ConfigManager::addDomain(const Common::String &domainName, const ConfigManager::Domain &domain) { +void ConfigManager::addDomain(const String &domainName, const ConfigManager::Domain &domain) {  	if (domainName.empty())  		return;  	if (domainName == kApplicationDomain) { @@ -492,7 +492,7 @@ int ConfigManager::getInt(const String &key, const String &domName) const {  bool ConfigManager::getBool(const String &key, const String &domName) const {  	String value(get(key, domName));  	bool val; -	if (Common::parseBool(value, val)) +	if (parseBool(value, val))  		return val;  	error("ConfigManager::getBool(%s,%s): '%s' is not a valid bool", @@ -696,4 +696,3 @@ bool ConfigManager::Domain::hasKVComment(const String &key) const {  }  } // End of namespace Common - diff --git a/common/config-manager.h b/common/config-manager.h index 78a62b9808..02d4ec3438 100644 --- a/common/config-manager.h +++ b/common/config-manager.h @@ -64,14 +64,14 @@ public:  	typedef HashMap<String, Domain, IgnoreCase_Hash, IgnoreCase_EqualTo> DomainMap;  	/** The name of the application domain (normally 'scummvm'). */ -	static const char *kApplicationDomain; +	static char const *const kApplicationDomain;  	/** The transient (pseudo) domain. */ -	static const char *kTransientDomain; +	static char const *const kTransientDomain;  #ifdef ENABLE_KEYMAPPER  	/** The name of keymapper domain used to store the key maps */ -	static const char *kKeymapperDomain; +	static char const *const kKeymapperDomain;  #endif  	void				loadDefaultConfigFile(); @@ -153,7 +153,7 @@ private:  	ConfigManager();  	void			loadFromStream(SeekableReadStream &stream); -	void			addDomain(const Common::String &domainName, const Domain &domain); +	void			addDomain(const String &domainName, const Domain &domain);  	void			writeDomain(WriteStream &stream, const String &name, const Domain &domain);  	void			renameDomain(const String &oldName, const String &newName, DomainMap &map); diff --git a/common/dcl.cpp b/common/dcl.cpp index b75f7f3fa6..1879be992d 100644 --- a/common/dcl.cpp +++ b/common/dcl.cpp @@ -30,7 +30,7 @@ namespace Common {  class DecompressorDCL {  public: -	bool unpack(Common::ReadStream *src, byte *dest, uint32 nPacked, uint32 nUnpacked); +	bool unpack(ReadStream *src, byte *dest, uint32 nPacked, uint32 nUnpacked);  protected:  	/** @@ -41,7 +41,7 @@ protected:  	 * @param nUnpacket	size of unpacked data  	 * @return 0 on success, non-zero on error  	 */ -	void init(Common::ReadStream *src, byte *dest, uint32 nPacked, uint32 nUnpacked); +	void init(ReadStream *src, byte *dest, uint32 nPacked, uint32 nUnpacked);  	/**  	 * Get a number of bits from _src stream, starting with the least @@ -73,12 +73,11 @@ protected:  	uint32 _szUnpacked;	///< size of the decompressed data  	uint32 _dwRead;		///< number of bytes read from _src  	uint32 _dwWrote;	///< number of bytes written to _dest -	Common::ReadStream *_src; +	ReadStream *_src;  	byte *_dest;  }; -void DecompressorDCL::init(Common::ReadStream *src, byte *dest, uint32 nPacked, -                        uint32 nUnpacked) { +void DecompressorDCL::init(ReadStream *src, byte *dest, uint32 nPacked, uint32 nUnpacked) {  	_src = src;  	_dest = dest;  	_szPacked = nPacked; @@ -333,7 +332,7 @@ int DecompressorDCL::huffman_lookup(const int *tree) {  #define DCL_BINARY_MODE 0  #define DCL_ASCII_MODE 1 -bool DecompressorDCL::unpack(Common::ReadStream *src, byte *dest, uint32 nPacked, uint32 nUnpacked) { +bool DecompressorDCL::unpack(ReadStream *src, byte *dest, uint32 nPacked, uint32 nUnpacked) {  	init(src, dest, nPacked, nUnpacked);  	int value; diff --git a/common/dcl.h b/common/dcl.h index 12c4e12772..78ffa631ed 100644 --- a/common/dcl.h +++ b/common/dcl.h @@ -52,4 +52,3 @@ SeekableReadStream *decompressDCL(ReadStream *src, uint32 packedSize, uint32 unp  } // End of namespace Common  #endif - diff --git a/common/events.h b/common/events.h index 371080c1b2..7df2731687 100644 --- a/common/events.h +++ b/common/events.h @@ -97,7 +97,7 @@ struct Event {  	 * Virtual screen coordinates means: the coordinate system of the  	 * screen area as defined by the most recent call to initSize().  	 */ -	Common::Point mouse; +	Point mouse;  	Event() : type(EVENT_INVALID), synthetic(false) {}  }; @@ -139,13 +139,13 @@ public:   */  class ArtificialEventSource : public EventSource {  protected: -	Common::Queue<Common::Event> _artificialEventQueue; +	Queue<Event> _artificialEventQueue;  public: -	void addEvent(const Common::Event &ev) { +	void addEvent(const Event &ev) {  		_artificialEventQueue.push(ev);  	} -	bool pollEvent(Common::Event &ev) { +	bool pollEvent(Event &ev) {  	if (!_artificialEventQueue.empty()) {  			ev = _artificialEventQueue.pop();  			return true; @@ -275,14 +275,14 @@ private:  		EventSource *source;  	}; -	Common::List<SourceEntry> _sources; +	List<SourceEntry> _sources;  	struct ObserverEntry : public Entry {  		uint priority;  		EventObserver *observer;  	}; -	Common::List<ObserverEntry> _observers; +	List<ObserverEntry> _observers;  	void dispatchEvent(const Event &event);  }; @@ -315,15 +315,15 @@ public:  	 * @param event	point to an Event struct, which will be filled with the event data.  	 * @return true if an event was retrieved.  	 */ -	virtual bool pollEvent(Common::Event &event) = 0; +	virtual bool pollEvent(Event &event) = 0;  	/**  	 * Pushes a "fake" event into the event queue  	 */ -	virtual void pushEvent(const Common::Event &event) = 0; +	virtual void pushEvent(const Event &event) = 0;  	/** Return the current mouse position */ -	virtual Common::Point getMousePos() const = 0; +	virtual Point getMousePos() const = 0;  	/**  	 * Return a bitmask with the button states: @@ -362,7 +362,7 @@ public:  	// TODO: Consider removing OSystem::getScreenChangeID and  	// replacing it by a generic getScreenChangeID method here  #ifdef ENABLE_KEYMAPPER -	virtual Common::Keymapper *getKeymapper() = 0; +	virtual Keymapper *getKeymapper() = 0;  #endif  	enum { diff --git a/common/file.cpp b/common/file.cpp index 381bf12ecf..12d73c9973 100644 --- a/common/file.cpp +++ b/common/file.cpp @@ -72,7 +72,7 @@ bool File::open(const FSNode &node) {  	return open(stream, node.getPath());  } -bool File::open(SeekableReadStream *stream, const Common::String &name) { +bool File::open(SeekableReadStream *stream, const String &name) {  	assert(!_handle);  	if (stream) { diff --git a/common/file.h b/common/file.h index 86c67c077c..b6319dfc3c 100644 --- a/common/file.h +++ b/common/file.h @@ -97,7 +97,7 @@ public:  	 * @param	name		a string describing the 'file' corresponding to stream  	 * @return	true if stream was non-zero, false otherwise  	 */ -	virtual bool open(SeekableReadStream *stream, const Common::String &name); +	virtual bool open(SeekableReadStream *stream, const String &name);  	/**  	 * Close the file, if open. diff --git a/common/fs.cpp b/common/fs.cpp index 3dc8c289aa..8aa1115f9d 100644 --- a/common/fs.cpp +++ b/common/fs.cpp @@ -33,7 +33,7 @@ FSNode::FSNode(AbstractFSNode *realNode)  	: _realNode(realNode) {  } -FSNode::FSNode(const Common::String &p) { +FSNode::FSNode(const String &p) {  	assert(g_system);  	FilesystemFactory *factory = g_system->getFilesystemFactory();  	AbstractFSNode *tmp = 0; @@ -42,7 +42,7 @@ FSNode::FSNode(const Common::String &p) {  		tmp = factory->makeCurrentDirectoryFileNode();  	else  		tmp = factory->makeFileNodePath(p); -	_realNode = Common::SharedPtr<AbstractFSNode>(tmp); +	_realNode = SharedPtr<AbstractFSNode>(tmp);  }  bool FSNode::operator<(const FSNode& node) const { @@ -59,7 +59,7 @@ bool FSNode::exists() const {  	return _realNode && _realNode->exists();  } -FSNode FSNode::getChild(const Common::String &n) const { +FSNode FSNode::getChild(const String &n) const {  	// If this node is invalid or not a directory, return an invalid node  	if (_realNode == 0 || !_realNode->isDirectory())  		return FSNode(); @@ -85,12 +85,12 @@ bool FSNode::getChildren(FSList &fslist, ListMode mode, bool hidden) const {  	return true;  } -Common::String FSNode::getDisplayName() const { +String FSNode::getDisplayName() const {  	assert(_realNode);  	return _realNode->getDisplayName();  } -Common::String FSNode::getName() const { +String FSNode::getName() const {  	assert(_realNode);  	return _realNode->getName();  } @@ -107,7 +107,7 @@ FSNode FSNode::getParent() const {  	}  } -Common::String FSNode::getPath() const { +String FSNode::getPath() const {  	assert(_realNode);  	return _realNode->getPath();  } @@ -124,7 +124,7 @@ bool FSNode::isWritable() const {  	return _realNode && _realNode->isWritable();  } -Common::SeekableReadStream *FSNode::createReadStream() const { +SeekableReadStream *FSNode::createReadStream() const {  	if (_realNode == 0)  		return 0; @@ -139,7 +139,7 @@ Common::SeekableReadStream *FSNode::createReadStream() const {  	return _realNode->createReadStream();  } -Common::WriteStream *FSNode::createWriteStream() const { +WriteStream *FSNode::createWriteStream() const {  	if (_realNode == 0)  		return 0; diff --git a/common/func.h b/common/func.h index e09ab1a438..db57d73668 100644 --- a/common/func.h +++ b/common/func.h @@ -424,7 +424,7 @@ private:   * are interesting for that matter.   */  template<class Arg, class Res> -struct Functor1 : public Common::UnaryFunction<Arg, Res> { +struct Functor1 : public UnaryFunction<Arg, Res> {  	virtual ~Functor1() {}  	virtual bool isValid() const = 0; @@ -460,7 +460,7 @@ private:   * @see Functor1   */  template<class Arg1, class Arg2, class Res> -struct Functor2 : public Common::BinaryFunction<Arg1, Arg2, Res> { +struct Functor2 : public BinaryFunction<Arg1, Arg2, Res> {  	virtual ~Functor2() {}  	virtual bool isValid() const = 0; @@ -538,4 +538,3 @@ GENERATE_TRIVIAL_HASH_FUNCTOR(unsigned long);  }	// End of namespace Common  #endif - diff --git a/common/huffman.h b/common/huffman.h index 9a8b712c23..4175d0d309 100644 --- a/common/huffman.h +++ b/common/huffman.h @@ -66,9 +66,9 @@ private:  		Symbol(uint32 c, uint32 s);  	}; -	typedef Common::List<Symbol> CodeList; -	typedef Common::Array<CodeList> CodeLists; -	typedef Common::Array<Symbol *> SymbolList; +	typedef List<Symbol> CodeList; +	typedef Array<CodeList> CodeLists; +	typedef Array<Symbol*> SymbolList;  	/** Lists of codes and their symbols, sorted by code length. */  	CodeLists _codes; diff --git a/common/iff_container.cpp b/common/iff_container.cpp index 02b445ae05..7bcbf86e0f 100644 --- a/common/iff_container.cpp +++ b/common/iff_container.cpp @@ -25,7 +25,7 @@  namespace Common { -IFFParser::IFFParser(Common::ReadStream *stream, bool disposeStream) : _stream(stream), _disposeStream(disposeStream) { +IFFParser::IFFParser(ReadStream *stream, bool disposeStream) : _stream(stream), _disposeStream(disposeStream) {  	setInputStream(stream);  } @@ -36,7 +36,7 @@ IFFParser::~IFFParser() {  	_stream = 0;  } -void IFFParser::setInputStream(Common::ReadStream *stream) { +void IFFParser::setInputStream(ReadStream *stream) {  	assert(stream);  	_formChunk.setInputStream(stream);  	_chunk.setInputStream(stream); @@ -63,7 +63,7 @@ void IFFParser::parse(IFFCallback &callback) {  		_chunk.readHeader();  		// invoke the callback -		Common::SubReadStream stream(&_chunk, _chunk.size); +		SubReadStream stream(&_chunk, _chunk.size);  		IFFChunk chunk(_chunk.id, _chunk.size, &stream);  		stop = callback(chunk); diff --git a/common/iff_container.h b/common/iff_container.h index 1b12ef70e5..104ecf0f36 100644 --- a/common/iff_container.h +++ b/common/iff_container.h @@ -146,11 +146,11 @@ page 376) */   *  Client code must *not* deallocate _stream when done.   */  struct IFFChunk { -	Common::IFF_ID			_type; -	uint32					_size; -	Common::ReadStream		*_stream; +	IFF_ID      _type; +	uint32      _size; +	ReadStream *_stream; -	IFFChunk(Common::IFF_ID type, uint32 size, Common::ReadStream *stream) : _type(type), _size(size), _stream(stream) { +	IFFChunk(IFF_ID type, uint32 size, ReadStream *stream) : _type(type), _size(size), _stream(stream) {  		assert(_stream);  	}  }; @@ -163,17 +163,17 @@ class IFFParser {  	/**  	 *  This private class implements IFF chunk navigation.  	 */ -	class IFFChunkNav : public Common::ReadStream { +	class IFFChunkNav : public ReadStream {  	protected: -		Common::ReadStream *_input; +		ReadStream *_input;  		uint32 _bytesRead;  	public: -		Common::IFF_ID id; +		IFF_ID id;  		uint32 size;  		IFFChunkNav() : _input(0) {  		} -		void setInputStream(Common::ReadStream *input) { +		void setInputStream(ReadStream *input) {  			_input = input;  			size = _bytesRead = 0;  		} @@ -199,7 +199,7 @@ class IFFParser {  				readByte();  			}  		} -		// Common::ReadStream implementation +		// ReadStream implementation  		bool eos() const { return _input->eos(); }  		bool err() const { return _input->err(); }  		void clearErr() { _input->clearErr(); } @@ -215,21 +215,21 @@ protected:  	IFFChunkNav _chunk; 	///< The current chunk.  	uint32 _formSize; -	Common::IFF_ID _formType; +	IFF_ID _formType; -	Common::ReadStream *_stream; +	ReadStream *_stream;  	bool _disposeStream; -	void setInputStream(Common::ReadStream *stream); +	void setInputStream(ReadStream *stream);  public: -	IFFParser(Common::ReadStream *stream, bool disposeStream = false); +	IFFParser(ReadStream *stream, bool disposeStream = false);  	~IFFParser();  	/**  	 * Callback type for the parser.  	 */ -	typedef Common::Functor1< IFFChunk&, bool > IFFCallback; +	typedef Functor1< IFFChunk&, bool > IFFCallback;  	/**  	 * Parse the IFF container, invoking the callback on each chunk encountered. diff --git a/common/memorypool.cpp b/common/memorypool.cpp index 3a570ac50e..19adc54d00 100644 --- a/common/memorypool.cpp +++ b/common/memorypool.cpp @@ -180,4 +180,3 @@ void MemoryPool::freeUnusedPages() {  }  } // End of namespace Common - diff --git a/common/ptr.h b/common/ptr.h index fc272d3d41..2b0670caae 100644 --- a/common/ptr.h +++ b/common/ptr.h @@ -24,6 +24,7 @@  #include "common/scummsys.h"  #include "common/noncopyable.h" +#include "common/types.h"  namespace Common { @@ -185,12 +186,12 @@ public:  	}  	template<class T2> -	bool operator==(const Common::SharedPtr<T2> &r) const { +	bool operator==(const SharedPtr<T2> &r) const {  		return _pointer == r.get();  	}  	template<class T2> -	bool operator!=(const Common::SharedPtr<T2> &r) const { +	bool operator!=(const SharedPtr<T2> &r) const {  		return _pointer != r.get();  	} @@ -231,7 +232,6 @@ public:  	ReferenceType operator*() const { return *_pointer; }  	PointerType operator->() const { return _pointer; } -	operator PointerType() const { return _pointer; }  	/**  	 * Implicit conversion operator to bool for convenience, to make @@ -274,6 +274,41 @@ private:  	PointerType _pointer;  }; + +template<typename T> +class DisposablePtr : NonCopyable { +public: +	typedef T  ValueType; +	typedef T *PointerType; +	typedef T &ReferenceType; + +	explicit DisposablePtr(PointerType o, DisposeAfterUse::Flag dispose) : _pointer(o), _dispose(dispose) {} + +	~DisposablePtr() { +		if (_dispose) delete _pointer; +	} + +	ReferenceType operator*() const { return *_pointer; } +	PointerType operator->() const { return _pointer; } + +	/** +	 * Implicit conversion operator to bool for convenience, to make +	 * checks like "if (scopedPtr) ..." possible. +	 */ +	operator bool() const { return _pointer; } + +	/** +	 * Returns the plain pointer value. +	 * +	 * @return the pointer the DisposablePtr manages +	 */ +	PointerType get() const { return _pointer; } + +private: +	PointerType           _pointer; +	DisposeAfterUse::Flag _dispose; +}; +  } // End of namespace Common  #endif diff --git a/common/quicktime.cpp b/common/quicktime.cpp index ee49b092a4..9ea8c229ea 100644 --- a/common/quicktime.cpp +++ b/common/quicktime.cpp @@ -8,19 +8,16 @@   * modify it under the terms of the GNU General Public License   * as published by the Free Software Foundation; either version 2   * of the License, or (at your option) any later version. - + *   * This program is distributed in the hope that it will be useful,   * but WITHOUT ANY WARRANTY; without even the implied warranty of   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the   * GNU General Public License for more details. - + *   * You should have received a copy of the GNU General Public License   * along with this program; if not, write to the Free Software   * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.   * - * $URL$ - * $Id$ - *   */  // @@ -51,7 +48,7 @@ QuickTimeParser::QuickTimeParser() {  	_fd = 0;  	_scaleFactorX = 1;  	_scaleFactorY = 1; -	_resFork = new Common::MacResManager(); +	_resFork = new MacResManager();  	_disposeFileHandle = DisposeAfterUse::YES;  	initParseTable(); @@ -62,7 +59,7 @@ QuickTimeParser::~QuickTimeParser() {  	delete _resFork;  } -bool QuickTimeParser::parseFile(const Common::String &filename) { +bool QuickTimeParser::parseFile(const String &filename) {  	if (!_resFork->open(filename) || !_resFork->hasDataFork())  		return false; @@ -73,7 +70,7 @@ bool QuickTimeParser::parseFile(const Common::String &filename) {  	if (_resFork->hasResFork()) {  		// Search for a 'moov' resource -		Common::MacResIDArray idArray = _resFork->getResIDArray(MKTAG('m', 'o', 'o', 'v')); +		MacResIDArray idArray = _resFork->getResIDArray(MKTAG('m', 'o', 'o', 'v'));  		if (!idArray.empty())  			_fd = _resFork->getResource(MKTAG('m', 'o', 'o', 'v'), idArray[0]); @@ -99,7 +96,7 @@ bool QuickTimeParser::parseFile(const Common::String &filename) {  	return true;  } -bool QuickTimeParser::parseStream(Common::SeekableReadStream *stream, DisposeAfterUse::Flag disposeFileHandle) { +bool QuickTimeParser::parseStream(SeekableReadStream *stream, DisposeAfterUse::Flag disposeFileHandle) {  	_fd = stream;  	_foundMOOV = false;  	_disposeFileHandle = disposeFileHandle; @@ -277,7 +274,7 @@ int QuickTimeParser::readCMOV(Atom atom) {  	// Uncompress the data  	unsigned long dstLen = uncompressedSize; -	if (!Common::uncompress(uncompressedData, &dstLen, compressedData, compressedSize)) { +	if (!uncompress(uncompressedData, &dstLen, compressedData, compressedSize)) {  		warning ("Could not uncompress cmov chunk");  		free(compressedData);  		free(uncompressedData); @@ -285,8 +282,8 @@ int QuickTimeParser::readCMOV(Atom atom) {  	}  	// Load data into a new MemoryReadStream and assign _fd to be that -	Common::SeekableReadStream *oldStream = _fd; -	_fd = new Common::MemoryReadStream(uncompressedData, uncompressedSize, DisposeAfterUse::YES); +	SeekableReadStream *oldStream = _fd; +	_fd = new MemoryReadStream(uncompressedData, uncompressedSize, DisposeAfterUse::YES);  	// Read the contents of the uncompressed data  	Atom a = { MKTAG('m', 'o', 'o', 'v'), 0, uncompressedSize }; @@ -336,8 +333,8 @@ int QuickTimeParser::readMVHD(Atom atom) {  	uint32 yMod = _fd->readUint32BE();  	_fd->skip(16); -	_scaleFactorX = Common::Rational(0x10000, xMod); -	_scaleFactorY = Common::Rational(0x10000, yMod); +	_scaleFactorX = Rational(0x10000, xMod); +	_scaleFactorY = Rational(0x10000, yMod);  	_scaleFactorX.debugPrint(1, "readMVHD(): scaleFactorX =");  	_scaleFactorY.debugPrint(1, "readMVHD(): scaleFactorY ="); @@ -406,8 +403,8 @@ int QuickTimeParser::readTKHD(Atom atom) {  	uint32 yMod = _fd->readUint32BE();  	_fd->skip(16); -	track->scaleFactorX = Common::Rational(0x10000, xMod); -	track->scaleFactorY = Common::Rational(0x10000, yMod); +	track->scaleFactorX = Rational(0x10000, xMod); +	track->scaleFactorY = Rational(0x10000, yMod);  	track->scaleFactorX.debugPrint(1, "readTKHD(): scaleFactorX =");  	track->scaleFactorY.debugPrint(1, "readTKHD(): scaleFactorY ="); @@ -434,7 +431,7 @@ int QuickTimeParser::readELST(Atom atom) {  	for (uint32 i = 0; i < track->editCount; i++){  		track->editList[i].trackDuration = _fd->readUint32BE();  		track->editList[i].mediaTime = _fd->readSint32BE(); -		track->editList[i].mediaRate = Common::Rational(_fd->readUint32BE(), 0x10000); +		track->editList[i].mediaRate = Rational(_fd->readUint32BE(), 0x10000);  		debugN(3, "\tDuration = %d, Media Time = %d, ", track->editList[i].trackDuration, track->editList[i].mediaTime);  		track->editList[i].mediaRate.debugPrint(3, "Media Rate =");  	} @@ -698,7 +695,7 @@ enum {  	kMP4DecSpecificDescTag = 5  }; -static int readMP4DescLength(Common::SeekableReadStream *stream) { +static int readMP4DescLength(SeekableReadStream *stream) {  	int length = 0;  	int count = 4; @@ -713,7 +710,7 @@ static int readMP4DescLength(Common::SeekableReadStream *stream) {  	return length;  } -static void readMP4Desc(Common::SeekableReadStream *stream, byte &tag, int &length) { +static void readMP4Desc(SeekableReadStream *stream, byte &tag, int &length) {  	tag = stream->readByte();  	length = readMP4DescLength(stream);  } diff --git a/common/quicktime.h b/common/quicktime.h index cb2bed1202..e4c821e209 100644 --- a/common/quicktime.h +++ b/common/quicktime.h @@ -8,19 +8,16 @@   * modify it under the terms of the GNU General Public License   * as published by the Free Software Foundation; either version 2   * of the License, or (at your option) any later version. - + *   * This program is distributed in the hope that it will be useful,   * but WITHOUT ANY WARRANTY; without even the implied warranty of   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the   * GNU General Public License for more details. - + *   * You should have received a copy of the GNU General Public License   * along with this program; if not, write to the Free Software   * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.   * - * $URL$ - * $Id$ - *   */  // @@ -59,14 +56,14 @@ public:  	 * Load a QuickTime file  	 * @param filename	the filename to load  	 */ -	bool parseFile(const Common::String &filename); +	bool parseFile(const String &filename);  	/**  	 * Load a QuickTime file from a SeekableReadStream  	 * @param stream	the stream to load  	 * @param disposeFileHandle whether to delete the stream after use  	 */ -	bool parseStream(Common::SeekableReadStream *stream, DisposeAfterUse::Flag disposeFileHandle = DisposeAfterUse::YES); +	bool parseStream(SeekableReadStream *stream, DisposeAfterUse::Flag disposeFileHandle = DisposeAfterUse::YES);  	/**  	 * Close a QuickTime file @@ -84,7 +81,7 @@ public:  protected:  	// This is the file handle from which data is read from. It can be the actual file handle or a decompressed stream. -	Common::SeekableReadStream *_fd; +	SeekableReadStream *_fd;  	DisposeAfterUse::Flag _disposeFileHandle; @@ -113,7 +110,7 @@ protected:  	struct EditListEntry {  		uint32 trackDuration;  		int32 mediaTime; -		Common::Rational mediaRate; +		Rational mediaRate;  	};  	struct Track; @@ -157,18 +154,18 @@ protected:  		uint16 height;  		CodecType codecType; -		Common::Array<SampleDesc *> sampleDescs; +		Array<SampleDesc*> sampleDescs;  		uint32 editCount;  		EditListEntry *editList; -		Common::SeekableReadStream *extraData; +		SeekableReadStream *extraData;  		uint32 frameCount;  		uint32 duration;  		uint32 startTime; -		Common::Rational scaleFactorX; -		Common::Rational scaleFactorY; +		Rational scaleFactorX; +		Rational scaleFactorY;  		byte objectTypeMP4;  	}; @@ -179,11 +176,11 @@ protected:  	bool _foundMOOV;  	uint32 _timeScale;  	uint32 _duration; -	Common::Rational _scaleFactorX; -	Common::Rational _scaleFactorY; -	Common::Array<Track *> _tracks; +	Rational _scaleFactorX; +	Rational _scaleFactorY; +	Array<Track*> _tracks;  	uint32 _beginOffset; -	Common::MacResManager *_resFork; +	MacResManager *_resFork;  	void initParseTable();  	void init(); diff --git a/common/rational.cpp b/common/rational.cpp index cb287869bb..f5495da3a9 100644 --- a/common/rational.cpp +++ b/common/rational.cpp @@ -107,8 +107,8 @@ Rational &Rational::operator-=(const Rational &right) {  Rational &Rational::operator*=(const Rational &right) {  	// Cross-cancel to avoid unnecessary overflow;  	// the result then is automatically normalized -	const int gcd1 = Common::gcd(_num, right._denom); -	const int gcd2 = Common::gcd(right._num, _denom); +	const int gcd1 = gcd(_num, right._denom); +	const int gcd2 = gcd(right._num, _denom);  	_num   = (_num    / gcd1) * (right._num    / gcd2);  	_denom = (_denom  / gcd2) * (right._denom  / gcd1); diff --git a/common/serializer.h b/common/serializer.h index b874624d38..5b08a9a9fa 100644 --- a/common/serializer.h +++ b/common/serializer.h @@ -68,15 +68,15 @@ public:  	static const Version kLastVersion = 0xFFFFFFFF;  protected: -	Common::SeekableReadStream *_loadStream; -	Common::WriteStream *_saveStream; +	SeekableReadStream *_loadStream; +	WriteStream *_saveStream;  	uint _bytesSynced;  	Version _version;  public: -	Serializer(Common::SeekableReadStream *in, Common::WriteStream *out) +	Serializer(SeekableReadStream *in, WriteStream *out)  		: _loadStream(in), _saveStream(out), _bytesSynced(0), _version(0) {  		assert(in || out);  	} @@ -214,7 +214,7 @@ public:  	 * Sync a C-string, by treating it as a zero-terminated byte sequence.  	 * @todo Replace this method with a special Syncer class for Common::String  	 */ -	void syncString(Common::String &str, Version minVersion = 0, Version maxVersion = kLastVersion) { +	void syncString(String &str, Version minVersion = 0, Version maxVersion = kLastVersion) {  		if (_version < minVersion || _version > maxVersion)  			return;	// Ignore anything which is not supposed to be present in this save game version diff --git a/common/str.h b/common/str.h index 8e07b6233d..5039130707 100644 --- a/common/str.h +++ b/common/str.h @@ -219,14 +219,14 @@ public:  	 * except that it stores the result in (variably sized) String  	 * instead of a fixed size buffer.  	 */ -	static Common::String format(const char *fmt, ...) GCC_PRINTF(1,2); +	static String format(const char *fmt, ...) GCC_PRINTF(1,2);  	/**  	 * Print formatted data into a String object. Similar to vsprintf,  	 * except that it stores the result in (variably sized) String  	 * instead of a fixed size buffer.  	 */ -	static Common::String vformat(const char *fmt, va_list args); +	static String vformat(const char *fmt, va_list args);  public:  	typedef char *        iterator; @@ -293,7 +293,7 @@ extern char *trim(char *t);   * @param sep character used to separate path components   * @return The last component of the path.   */ -Common::String lastPathComponent(const Common::String &path, const char sep); +String lastPathComponent(const String &path, const char sep);  /**   * Normalize a given path to a canonical form. In particular: @@ -307,7 +307,7 @@ Common::String lastPathComponent(const Common::String &path, const char sep);   * @param sep   the separator token (usually '/' on Unix-style systems, or '\\' on Windows based stuff)   * @return      the normalized path   */ -Common::String normalizePath(const Common::String &path, const char sep); +String normalizePath(const String &path, const char sep);  /** diff --git a/common/stream.cpp b/common/stream.cpp index 60b40d0df2..30b3bca497 100644 --- a/common/stream.cpp +++ b/common/stream.cpp @@ -20,6 +20,7 @@   *   */ +#include "common/ptr.h"  #include "common/stream.h"  #include "common/memstream.h"  #include "common/substream.h" @@ -258,8 +259,7 @@ namespace {   */  class BufferedReadStream : virtual public ReadStream {  protected: -	ReadStream *_parentStream; -	DisposeAfterUse::Flag _disposeParentStream; +	DisposablePtr<ReadStream> _parentStream;  	byte *_buf;  	uint32 _pos;  	bool _eos; // end of stream @@ -278,8 +278,7 @@ public:  };  BufferedReadStream::BufferedReadStream(ReadStream *parentStream, uint32 bufSize, DisposeAfterUse::Flag disposeParentStream) -	: _parentStream(parentStream), -	_disposeParentStream(disposeParentStream), +	: _parentStream(parentStream, disposeParentStream),  	_pos(0),  	_eos(false),  	_bufSize(0), @@ -291,8 +290,6 @@ BufferedReadStream::BufferedReadStream(ReadStream *parentStream, uint32 bufSize,  }  BufferedReadStream::~BufferedReadStream() { -	if (_disposeParentStream) -		delete _parentStream;  	delete[] _buf;  } diff --git a/common/substream.h b/common/substream.h index f4f79ff02f..7e67389da1 100644 --- a/common/substream.h +++ b/common/substream.h @@ -23,6 +23,7 @@  #ifndef COMMON_SUBSTREAM_H  #define COMMON_SUBSTREAM_H +#include "common/ptr.h"  #include "common/stream.h"  #include "common/types.h" @@ -38,24 +39,18 @@ namespace Common {   */  class SubReadStream : virtual public ReadStream {  protected: -	ReadStream *_parentStream; -	DisposeAfterUse::Flag _disposeParentStream; +	DisposablePtr<ReadStream> _parentStream;  	uint32 _pos;  	uint32 _end;  	bool _eos;  public:  	SubReadStream(ReadStream *parentStream, uint32 end, DisposeAfterUse::Flag disposeParentStream = DisposeAfterUse::NO) -		: _parentStream(parentStream), -		  _disposeParentStream(disposeParentStream), +		: _parentStream(parentStream, disposeParentStream),  		  _pos(0),  		  _end(end),  		  _eos(false) {  		assert(parentStream);  	} -	~SubReadStream() { -		if (_disposeParentStream) -			delete _parentStream; -	}  	virtual bool eos() const { return _eos | _parentStream->eos(); }  	virtual bool err() const { return _parentStream->err(); } diff --git a/common/system.cpp b/common/system.cpp index 8d5bfd39cd..59210544ab 100644 --- a/common/system.cpp +++ b/common/system.cpp @@ -28,6 +28,7 @@  #include "common/savefile.h"  #include "common/str.h"  #include "common/taskbar.h" +#include "common/updates.h"  #include "common/textconsole.h"  #include "backends/audiocd/default/default-audiocd.h" @@ -44,6 +45,9 @@ OSystem::OSystem() {  #if defined(USE_TASKBAR)  	_taskbarManager = 0;  #endif +#if defined(USE_UPDATES) +	_updateManager = 0; +#endif  	_fsFactory = 0;  } @@ -62,6 +66,11 @@ OSystem::~OSystem() {  	_taskbarManager = 0;  #endif +#if defined(USE_UPDATES) +	delete _updateManager; +	_updateManager = 0; +#endif +  	delete _savefileManager;  	_savefileManager = 0; diff --git a/common/system.h b/common/system.h index 9b833c5b1a..413fe326a7 100644 --- a/common/system.h +++ b/common/system.h @@ -45,6 +45,9 @@ class String;  #if defined(USE_TASKBAR)  class TaskbarManager;  #endif +#if defined(USE_UPDATES) +class UpdateManager; +#endif  class TimerManager;  class SeekableReadStream;  class WriteStream; @@ -161,6 +164,15 @@ protected:  	Common::TaskbarManager *_taskbarManager;  #endif +#if defined(USE_UPDATES) +	/** +	 * No default value is provided for _updateManager by OSystem. +	 * +	 * @note _updateManager is deleted by the OSystem destructor. +	 */ +	Common::UpdateManager *_updateManager; +#endif +  	/**  	 * No default value is provided for _fsFactory by OSystem.  	 * @@ -391,6 +403,11 @@ public:  	 * factor 2x, too, just like the game graphics. But if it has a  	 * cursorTargetScale of 2, then it shouldn't be scaled again by  	 * the game graphics scaler. +	 * +	 * On a note for OSystem users here. We do not require our graphics +	 * to be thread safe and in fact most/all backends using OpenGL are +	 * not. So do *not* try to call any of these functions from a timer +	 * and/or audio callback (like readBuffer of AudioStreams).  	 */  	//@{ @@ -1071,6 +1088,18 @@ public:  	}  #endif +#if defined(USE_UPDATES) +	/** +	 * Returns the UpdateManager, used to handle auto-updating, +	 * and updating of ScummVM in general. +	 * +	 * @return the UpdateManager for the current architecture +	 */ +	virtual Common::UpdateManager *getUpdateManager() { +		return _updateManager; +	} +#endif +  	/**  	 * Returns the FilesystemFactory object, depending on the current architecture.  	 * diff --git a/common/taskbar.h b/common/taskbar.h index 023227e5e0..ba99d4e487 100644 --- a/common/taskbar.h +++ b/common/taskbar.h @@ -18,8 +18,6 @@   * along with this program; if not, write to the Free Software   * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.   * - * $URL$ - * $Id$   */  #ifndef COMMON_TASKBAR_MANAGER_H @@ -124,6 +122,18 @@ public:  	 */  	virtual void addRecent(const String &name, const String &description) {} +	/** +	 * Notifies the user an error occured through the taskbar icon +	 * +	 * This will for example show the taskbar icon as red (using progress of 100% and an error state) +	 * on Windows, and set the launcher icon in the urgent state on Unity +	 */ +	virtual void notifyError() {} + +	/** +	 * Clears the error notification +	 */ +	virtual void clearError() {}  };  }	// End of namespace Common diff --git a/common/timer.h b/common/timer.h index 40438f078c..3db32df76a 100644 --- a/common/timer.h +++ b/common/timer.h @@ -23,6 +23,7 @@  #define COMMON_TIMER_H  #include "common/scummsys.h" +#include "common/str.h"  #include "common/noncopyable.h"  namespace Common { @@ -43,9 +44,10 @@ public:  	 * @param proc		the callback  	 * @param interval	the interval in which the timer shall be invoked (in microseconds)  	 * @param refCon	an arbitrary void pointer; will be passed to the timer callback +	 * @param id            unique string id of the installed timer. Used by the event recorder  	 * @return	true if the timer was installed successfully, false otherwise  	 */ -	virtual bool installTimerProc(TimerProc proc, int32 interval, void *refCon) = 0; +	virtual bool installTimerProc(TimerProc proc, int32 interval, void *refCon, const Common::String &id) = 0;  	/**  	 * Remove the given timer callback. It will not be invoked anymore, diff --git a/common/tokenizer.cpp b/common/tokenizer.cpp index 395ff0767a..46ba7a8d8b 100644 --- a/common/tokenizer.cpp +++ b/common/tokenizer.cpp @@ -53,4 +53,3 @@ String StringTokenizer::nextToken() {  }  } // End of namespace Common - diff --git a/common/unarj.cpp b/common/unarj.cpp index f45dddaa38..cccc330bb5 100644 --- a/common/unarj.cpp +++ b/common/unarj.cpp @@ -293,8 +293,8 @@ ArjHeader *readHeader(SeekableReadStream &stream) {  		return NULL;  	} -	Common::strlcpy(header.filename, (const char *)&headData[header.firstHdrSize], ARJ_FILENAME_MAX); -	Common::strlcpy(header.comment, (const char *)&headData[header.firstHdrSize + strlen(header.filename) + 1], ARJ_COMMENT_MAX); +	strlcpy(header.filename, (const char *)&headData[header.firstHdrSize], ARJ_FILENAME_MAX); +	strlcpy(header.comment, (const char *)&headData[header.firstHdrSize + strlen(header.filename) + 1], ARJ_COMMENT_MAX);  	// Process extended headers, if any  	uint16 extHeaderSize; @@ -692,15 +692,15 @@ void ArjDecoder::decode_f(int32 origsize) {  typedef HashMap<String, ArjHeader*, IgnoreCase_Hash, IgnoreCase_EqualTo> ArjHeadersMap; -class ArjArchive : public Common::Archive { +class ArjArchive : public Archive {  	ArjHeadersMap _headers; -	Common::String _arjFilename; +	String _arjFilename;  public:  	ArjArchive(const String &name);  	virtual ~ArjArchive(); -	// Common::Archive implementation +	// Archive implementation  	virtual bool hasFile(const String &name);  	virtual int listMembers(ArchiveMemberList &list);  	virtual ArchiveMemberPtr getMember(const String &name); @@ -708,7 +708,7 @@ public:  };  ArjArchive::ArjArchive(const String &filename) : _arjFilename(filename) { -	Common::File arjFile; +	File arjFile;  	if (!arjFile.open(_arjFilename)) {  		warning("ArjArchive::ArjArchive(): Could not find the archive file"); @@ -775,7 +775,7 @@ SeekableReadStream *ArjArchive::createReadStreamForMember(const String &name) co  	ArjHeader *hdr = _headers[name]; -	Common::File archiveFile; +	File archiveFile;  	archiveFile.open(_arjFilename);  	archiveFile.seek(hdr->pos, SEEK_SET); @@ -794,8 +794,8 @@ SeekableReadStream *ArjArchive::createReadStreamForMember(const String &name) co  		// If reading from archiveFile directly is too slow to be usable,  		// maybe the filesystem code should instead wrap its files  		// in a BufferedReadStream. -		decoder->_compressed = Common::wrapBufferedReadStream(&archiveFile, 4096, DisposeAfterUse::NO); -		decoder->_outstream = new Common::MemoryWriteStream(uncompressedData, hdr->origSize); +		decoder->_compressed = wrapBufferedReadStream(&archiveFile, 4096, DisposeAfterUse::NO); +		decoder->_outstream = new MemoryWriteStream(uncompressedData, hdr->origSize);  		if (hdr->method == 1 || hdr->method == 2 || hdr->method == 3)  			decoder->decode(hdr->origSize); @@ -805,7 +805,7 @@ SeekableReadStream *ArjArchive::createReadStreamForMember(const String &name) co  		delete decoder;  	} -	return new Common::MemoryReadStream(uncompressedData, hdr->origSize, DisposeAfterUse::YES); +	return new MemoryReadStream(uncompressedData, hdr->origSize, DisposeAfterUse::YES);  }  Archive *makeArjArchive(const String &name) { diff --git a/common/unzip.cpp b/common/unzip.cpp index 91f352f40a..8650c91866 100644 --- a/common/unzip.cpp +++ b/common/unzip.cpp @@ -1458,11 +1458,11 @@ ZipArchive::~ZipArchive() {  	unzClose(_zipFile);  } -bool ZipArchive::hasFile(const Common::String &name) { +bool ZipArchive::hasFile(const String &name) {  	return (unzLocateFile(_zipFile, name.c_str(), 2) == UNZ_OK);  } -int ZipArchive::listMembers(Common::ArchiveMemberList &list) { +int ZipArchive::listMembers(ArchiveMemberList &list) {  	int matches = 0;  	int err = unzGoToFirstFile(_zipFile); @@ -1488,7 +1488,7 @@ ArchiveMemberPtr ZipArchive::getMember(const String &name) {  	return ArchiveMemberPtr(new GenericArchiveMember(name, this));  } -Common::SeekableReadStream *ZipArchive::createReadStreamForMember(const Common::String &name) const { +SeekableReadStream *ZipArchive::createReadStreamForMember(const String &name) const {  	if (unzLocateFile(_zipFile, name.c_str(), 2) != UNZ_OK)  		return 0; @@ -1512,7 +1512,7 @@ Common::SeekableReadStream *ZipArchive::createReadStreamForMember(const Common::  		return 0;  	} -	return new Common::MemoryReadStream(buffer, fileInfo.uncompressed_size, DisposeAfterUse::YES); +	return new MemoryReadStream(buffer, fileInfo.uncompressed_size, DisposeAfterUse::YES);  	// FIXME: instead of reading all into a memory stream, we could  	// instead create a new ZipStream class. But then we have to be diff --git a/common/updates.h b/common/updates.h new file mode 100644 index 0000000000..1e0babdf6d --- /dev/null +++ b/common/updates.h @@ -0,0 +1,102 @@ +/* ScummVM - Graphic Adventure Engine + * + * ScummVM is the legal property of its developers, whose names + * are too numerous to list here. Please refer to the COPYRIGHT + * file distributed with this source distribution. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + */ + +#ifndef BACKENDS_UPDATES_ABSTRACT_H +#define BACKENDS_UPDATES_ABSTRACT_H + +#if defined(USE_UPDATES) + +namespace Common { + +/** + * The UpdateManager allows configuring of the automatic update checking + * for systems that support it: + *  - using Sparkle on MacOSX + *  - using WinSparkle on Windows + * + * Most of the update checking is completely automated and this class only + * gives access to basic settings. It is mostly used by the GUI to set + * widgets state on the update page and for manually checking for updates + * + */ +class UpdateManager { +public: +	enum UpdateState { +		kUpdateStateDisabled     = 0, +		kUpdateStateEnabled      = 1, +		kUpdateStateNotSupported = 2 +	}; + +	enum UpdateInterval { +		kUpdateIntervalNotSupported = 0, +		kUpdateIntervalOneDay       = 86400, +		kUpdateIntervalOneWeek      = 604800, +		kUpdateIntervalOneMonth     = 2628000   // average seconds per month (60*60*24*365)/12 +	}; + +	UpdateManager() {} +	virtual ~UpdateManager() {} + +	/** +	 * Checks manually if an update is available, showing progress UI to the user. +	 * +	 * By default, update checks are done silently on start. +	 * This allows to manually start an update check. +	 */ +	virtual void checkForUpdates() {} + +	/** +	 * Sets the automatic update checking state +	 * +	 * @param  state    The state. +	 */ +	virtual void setAutomaticallyChecksForUpdates(UpdateState state) {} + +	/** +	 * Gets the automatic update checking state +	 * +	 * @return  kUpdateStateDisabled     if automatic update checking is disabled, +	 *          kUpdateStateEnabled      if automatic update checking is enabled, +	 *          kUpdateStateNotSupported if automatic update checking is not available +	 */ +	virtual UpdateState getAutomaticallyChecksForUpdates() { return kUpdateStateNotSupported; } + +	/** +	 * Sets the update checking interval. +	 * +	 * @param  interval    The interval. +	 */ +	virtual void setUpdateCheckInterval(UpdateInterval interval) {} + +	/** +	 * Gets the update check interval. +	 * +	 * @return  the update check interval. +	 */ +	virtual UpdateInterval getUpdateCheckInterval() { return kUpdateIntervalNotSupported; } +}; + +}	// End of namespace Common + +#endif + +#endif // BACKENDS_UPDATES_ABSTRACT_H diff --git a/common/util.cpp b/common/util.cpp index a7ec1a9de7..6bde6a6555 100644 --- a/common/util.cpp +++ b/common/util.cpp @@ -82,7 +82,7 @@ void hexdump(const byte *data, int len, int bytesPerLine, int startOffset) {  #pragma mark - -bool parseBool(const Common::String &val, bool &valAsBool) { +bool parseBool(const String &val, bool &valAsBool) {  	if (val.equalsIgnoreCase("true") ||  		val.equalsIgnoreCase("yes") ||  		val.equals("1")) { @@ -402,4 +402,3 @@ void updateGameGUIOptions(const uint32 options, const String &langOption) {  }  } // End of namespace Common - diff --git a/common/util.h b/common/util.h index cd890c970f..a96c7a60c6 100644 --- a/common/util.h +++ b/common/util.h @@ -58,6 +58,11 @@ template<typename T> inline void SWAP(T &a, T &b) { T tmp = a; a = b; b = tmp; }   */  #define ARRAYSIZE(x) ((int)(sizeof(x) / sizeof(x[0]))) +/** + * Compute a pointer to one past the last element of an array. + */ +#define ARRAYEND(x) ((x) + ARRAYSIZE((x))) +  /**   * @def SCUMMVM_CURRENT_FUNCTION @@ -96,7 +101,7 @@ extern void hexdump(const byte * data, int len, int bytesPerLine = 16, int start   * @param[out] valAsBool	the parsing result   * @return 	true if the string parsed correctly, false if an error occurred.   */ -bool parseBool(const Common::String &val, bool &valAsBool); +bool parseBool(const String &val, bool &valAsBool);  /**   * List of game language. @@ -131,7 +136,7 @@ struct LanguageDescription {  	const char *code;  	//const char *unixLocale;  	const char *description; -	Common::Language id; +	Language id;  };  extern const LanguageDescription g_languages[]; @@ -182,7 +187,7 @@ struct PlatformDescription {  	const char *code2;  	const char *abbrev;  	const char *description; -	Common::Platform id; +	Platform id;  };  extern const PlatformDescription g_platforms[]; @@ -211,7 +216,7 @@ enum RenderMode {  struct RenderModeDescription {  	const char *code;  	const char *description; -	Common::RenderMode id; +	RenderMode id;  };  extern const RenderModeDescription g_renderModes[]; diff --git a/common/winexe_pe.cpp b/common/winexe_pe.cpp index e5f6a24bcd..6c0f9c9962 100644 --- a/common/winexe_pe.cpp +++ b/common/winexe_pe.cpp @@ -133,7 +133,7 @@ void PEResources::parseResourceLevel(Section §ion, uint32 offset, int level)  			_exe->seek(section.offset + (value & 0x7fffffff));  			// Read in the name, truncating from unicode to ascii -			Common::String name; +			String name;  			uint16 nameLength = _exe->readUint16LE();  			while (nameLength--)  				name += (char)(_exe->readUint16LE() & 0xff); diff --git a/common/xmlparser.cpp b/common/xmlparser.cpp index 623619914a..f768e44382 100644 --- a/common/xmlparser.cpp +++ b/common/xmlparser.cpp @@ -81,7 +81,7 @@ void XMLParser::close() {  	_stream = 0;  } -bool XMLParser::parserError(const Common::String &errStr) { +bool XMLParser::parserError(const String &errStr) {  	_state = kParserError;  	const int startPosition = _stream->pos(); diff --git a/common/xmlparser.h b/common/xmlparser.h index d75dc0e4a9..93433b7132 100644 --- a/common/xmlparser.h +++ b/common/xmlparser.h @@ -275,7 +275,7 @@ protected:  	 * Parser error always returns "false" so we can pass the return value  	 * directly and break down the parsing.  	 */ -	bool parserError(const Common::String &errStr); +	bool parserError(const String &errStr);  	/**  	 * Skips spaces/whitelines etc. diff --git a/common/zlib.cpp b/common/zlib.cpp index b047586af0..86c618830e 100644 --- a/common/zlib.cpp +++ b/common/zlib.cpp @@ -24,6 +24,7 @@  #define FORBIDDEN_SYMBOL_ALLOW_ALL  #include "common/zlib.h" +#include "common/ptr.h"  #include "common/util.h"  #include "common/stream.h" @@ -53,7 +54,7 @@ bool uncompress(byte *dst, unsigned long *dstLen, const byte *src, unsigned long   * other SeekableReadStream and will then provide on-the-fly decompression support.   * Assumes the compressed data to be in gzip format.   */ -class GZipReadStream : public Common::SeekableReadStream { +class GZipReadStream : public SeekableReadStream {  protected:  	enum {  		BUFSIZE = 16384		// 1 << MAX_WBITS @@ -61,7 +62,7 @@ protected:  	byte	_buf[BUFSIZE]; -	Common::SeekableReadStream *_wrapped; +	ScopedPtr<SeekableReadStream> _wrapped;  	z_stream _stream;  	int _zlibErr;  	uint32 _pos; @@ -70,13 +71,9 @@ protected:  public: -	GZipReadStream(Common::SeekableReadStream *w) : _wrapped(w) { +	GZipReadStream(SeekableReadStream *w) : _wrapped(w), _stream() {  		assert(w != 0); -		_stream.zalloc = Z_NULL; -		_stream.zfree = Z_NULL; -		_stream.opaque = Z_NULL; -  		// Verify file header is correct  		w->seek(0, SEEK_SET);  		uint16 header = w->readUint16BE(); @@ -111,7 +108,6 @@ public:  	~GZipReadStream() {  		inflateEnd(&_stream); -		delete _wrapped;  	}  	bool err() const { return (_zlibErr != Z_OK) && (_zlibErr != Z_STREAM_END); } @@ -201,14 +197,14 @@ public:   * other WriteStream and will then provide on-the-fly compression support.   * The compressed data is written in the gzip format.   */ -class GZipWriteStream : public Common::WriteStream { +class GZipWriteStream : public WriteStream {  protected:  	enum {  		BUFSIZE = 16384		// 1 << MAX_WBITS  	};  	byte	_buf[BUFSIZE]; -	Common::WriteStream *_wrapped; +	ScopedPtr<WriteStream> _wrapped;  	z_stream _stream;  	int _zlibErr; @@ -228,11 +224,8 @@ protected:  	}  public: -	GZipWriteStream(Common::WriteStream *w) : _wrapped(w) { +	GZipWriteStream(WriteStream *w) : _wrapped(w), _stream() {  		assert(w != 0); -		_stream.zalloc = Z_NULL; -		_stream.zfree = Z_NULL; -		_stream.opaque = Z_NULL;  		// Adding 16 to windowBits indicates to zlib that it is supposed to  		// write gzip headers. This feature was added in zlib 1.2.0.4, @@ -255,7 +248,6 @@ public:  	~GZipWriteStream() {  		finalize();  		deflateEnd(&_stream); -		delete _wrapped;  	}  	bool err() const { @@ -308,7 +300,7 @@ public:  #endif	// USE_ZLIB -Common::SeekableReadStream *wrapCompressedReadStream(Common::SeekableReadStream *toBeWrapped) { +SeekableReadStream *wrapCompressedReadStream(SeekableReadStream *toBeWrapped) {  #if defined(USE_ZLIB)  	if (toBeWrapped) {  		uint16 header = toBeWrapped->readUint16BE(); @@ -323,7 +315,7 @@ Common::SeekableReadStream *wrapCompressedReadStream(Common::SeekableReadStream  	return toBeWrapped;  } -Common::WriteStream *wrapCompressedWriteStream(Common::WriteStream *toBeWrapped) { +WriteStream *wrapCompressedWriteStream(WriteStream *toBeWrapped) {  #if defined(USE_ZLIB)  	if (toBeWrapped)  		return new GZipWriteStream(toBeWrapped);  | 
