mirror of
				https://github.com/Telecominfraproject/wlan-cloud-lib-poco.git
				synced 2025-10-31 10:37:46 +00:00 
			
		
		
		
	latest changes from main repository
This commit is contained in:
		| @@ -944,6 +944,9 @@ | |||||||
| 				<File | 				<File | ||||||
| 					RelativePath=".\src\ActiveDispatcher.cpp"> | 					RelativePath=".\src\ActiveDispatcher.cpp"> | ||||||
| 				</File> | 				</File> | ||||||
|  | 				<File | ||||||
|  | 					RelativePath=".\src\Condition.cpp"> | ||||||
|  | 				</File> | ||||||
| 				<File | 				<File | ||||||
| 					RelativePath=".\src\ErrorHandler.cpp"> | 					RelativePath=".\src\ErrorHandler.cpp"> | ||||||
| 				</File> | 				</File> | ||||||
| @@ -1272,6 +1275,9 @@ | |||||||
| 				<File | 				<File | ||||||
| 					RelativePath=".\include\Poco\Activity.h"> | 					RelativePath=".\include\Poco\Activity.h"> | ||||||
| 				</File> | 				</File> | ||||||
|  | 				<File | ||||||
|  | 					RelativePath=".\include\Poco\Condition.h"> | ||||||
|  | 				</File> | ||||||
| 				<File | 				<File | ||||||
| 					RelativePath=".\include\Poco\ErrorHandler.h"> | 					RelativePath=".\include\Poco\ErrorHandler.h"> | ||||||
| 				</File> | 				</File> | ||||||
| @@ -1311,6 +1317,9 @@ | |||||||
| 				<File | 				<File | ||||||
| 					RelativePath=".\include\Poco\ScopedLock.h"> | 					RelativePath=".\include\Poco\ScopedLock.h"> | ||||||
| 				</File> | 				</File> | ||||||
|  | 				<File | ||||||
|  | 					RelativePath=".\include\Poco\ScopedUnlock.h"> | ||||||
|  | 				</File> | ||||||
| 				<File | 				<File | ||||||
| 					RelativePath=".\include\Poco\Semaphore.h"> | 					RelativePath=".\include\Poco\Semaphore.h"> | ||||||
| 				</File> | 				</File> | ||||||
|   | |||||||
| @@ -1275,6 +1275,10 @@ | |||||||
| 					RelativePath=".\src\ActiveDispatcher.cpp" | 					RelativePath=".\src\ActiveDispatcher.cpp" | ||||||
| 					> | 					> | ||||||
| 				</File> | 				</File> | ||||||
|  | 				<File | ||||||
|  | 					RelativePath=".\src\Condition.cpp" | ||||||
|  | 					> | ||||||
|  | 				</File> | ||||||
| 				<File | 				<File | ||||||
| 					RelativePath=".\src\ErrorHandler.cpp" | 					RelativePath=".\src\ErrorHandler.cpp" | ||||||
| 					> | 					> | ||||||
| @@ -1711,6 +1715,10 @@ | |||||||
| 					RelativePath=".\include\Poco\Activity.h" | 					RelativePath=".\include\Poco\Activity.h" | ||||||
| 					> | 					> | ||||||
| 				</File> | 				</File> | ||||||
|  | 				<File | ||||||
|  | 					RelativePath=".\include\Poco\Condition.h" | ||||||
|  | 					> | ||||||
|  | 				</File> | ||||||
| 				<File | 				<File | ||||||
| 					RelativePath=".\include\Poco\ErrorHandler.h" | 					RelativePath=".\include\Poco\ErrorHandler.h" | ||||||
| 					> | 					> | ||||||
| @@ -1763,6 +1771,10 @@ | |||||||
| 					RelativePath=".\include\Poco\ScopedLock.h" | 					RelativePath=".\include\Poco\ScopedLock.h" | ||||||
| 					> | 					> | ||||||
| 				</File> | 				</File> | ||||||
|  | 				<File | ||||||
|  | 					RelativePath=".\include\Poco\ScopedUnlock.h" | ||||||
|  | 					> | ||||||
|  | 				</File> | ||||||
| 				<File | 				<File | ||||||
| 					RelativePath=".\include\Poco\Semaphore.h" | 					RelativePath=".\include\Poco\Semaphore.h" | ||||||
| 					> | 					> | ||||||
|   | |||||||
| @@ -1,7 +1,7 @@ | |||||||
| # | # | ||||||
| # Makefile | # Makefile | ||||||
| # | # | ||||||
| # $Id: //poco/Main/Foundation/Makefile#40 $ | # $Id: //poco/Main/Foundation/Makefile#41 $ | ||||||
| # | # | ||||||
| # Makefile for Poco Foundation | # Makefile for Poco Foundation | ||||||
| # | # | ||||||
| @@ -20,7 +20,7 @@ objects = ArchiveStrategy ASCIIEncoding AsyncChannel Base64Decoder Base64Encoder | |||||||
| 	NestedDiagnosticContext Notification NotificationCenter \ | 	NestedDiagnosticContext Notification NotificationCenter \ | ||||||
| 	NotificationQueue NullStream NumberFormatter NumberParser AbstractObserver \ | 	NotificationQueue NullStream NumberFormatter NumberParser AbstractObserver \ | ||||||
| 	Path PatternFormatter Process PurgeStrategy RWLock Random RandomStream \ | 	Path PatternFormatter Process PurgeStrategy RWLock Random RandomStream \ | ||||||
| 	RegularExpression RefCountedObject Runnable RotateStrategy \ | 	RegularExpression RefCountedObject Runnable RotateStrategy Condition \ | ||||||
| 	SHA1Engine Semaphore SharedLibrary SimpleFileChannel \ | 	SHA1Engine Semaphore SharedLibrary SimpleFileChannel \ | ||||||
| 	SignalHandler SplitterChannel Stopwatch StreamChannel StreamConverter StreamCopier \ | 	SignalHandler SplitterChannel Stopwatch StreamChannel StreamConverter StreamCopier \ | ||||||
| 	StreamTokenizer String StringTokenizer SynchronizedObject SyslogChannel \ | 	StreamTokenizer String StringTokenizer SynchronizedObject SyslogChannel \ | ||||||
|   | |||||||
| @@ -1,7 +1,7 @@ | |||||||
| // | // | ||||||
| // ASCIIEncoding.h | // ASCIIEncoding.h | ||||||
| // | // | ||||||
| // $Id: //poco/Main/Foundation/include/Poco/ASCIIEncoding.h#2 $ | // $Id: //poco/Main/Foundation/include/Poco/ASCIIEncoding.h#3 $ | ||||||
| // | // | ||||||
| // Library: Foundation | // Library: Foundation | ||||||
| // Package: Text | // Package: Text | ||||||
| @@ -9,7 +9,7 @@ | |||||||
| // | // | ||||||
| // Definition of the ASCIIEncoding class. | // Definition of the ASCIIEncoding class. | ||||||
| // | // | ||||||
| // Copyright (c) 2004-2006, Applied Informatics Software Engineering GmbH. | // Copyright (c) 2004-2007, Applied Informatics Software Engineering GmbH. | ||||||
| // and Contributors. | // and Contributors. | ||||||
| // | // | ||||||
| // Permission is hereby granted, free of charge, to any person or organization | // Permission is hereby granted, free of charge, to any person or organization | ||||||
| @@ -53,11 +53,14 @@ class Foundation_API ASCIIEncoding: public TextEncoding | |||||||
| public: | public: | ||||||
| 	ASCIIEncoding(); | 	ASCIIEncoding(); | ||||||
| 	~ASCIIEncoding(); | 	~ASCIIEncoding(); | ||||||
|  | 	const char* canonicalName() const; | ||||||
|  | 	bool isA(const std::string& encodingName) const; | ||||||
| 	const CharacterMap& characterMap() const; | 	const CharacterMap& characterMap() const; | ||||||
| 	int convert(const unsigned char* bytes) const; | 	int convert(const unsigned char* bytes) const; | ||||||
| 	int convert(int ch, unsigned char* bytes, int length) const; | 	int convert(int ch, unsigned char* bytes, int length) const; | ||||||
| 	 | 	 | ||||||
| private: | private: | ||||||
|  | 	static const char* _names[]; | ||||||
| 	static const CharacterMap _charMap; | 	static const CharacterMap _charMap; | ||||||
| }; | }; | ||||||
|  |  | ||||||
|   | |||||||
| @@ -1,7 +1,7 @@ | |||||||
| // | // | ||||||
| // Bugcheck.h | // Bugcheck.h | ||||||
| // | // | ||||||
| // $Id: //poco/Main/Foundation/include/Poco/Bugcheck.h#3 $ | // $Id: //poco/Main/Foundation/include/Poco/Bugcheck.h#5 $ | ||||||
| // | // | ||||||
| // Library: Foundation | // Library: Foundation | ||||||
| // Package: Core | // Package: Core | ||||||
| @@ -86,6 +86,9 @@ protected: | |||||||
| }; | }; | ||||||
|  |  | ||||||
|  |  | ||||||
|  | } // namespace Poco | ||||||
|  |  | ||||||
|  |  | ||||||
| // | // | ||||||
| // useful macros (these automatically supply line number and file name) | // useful macros (these automatically supply line number and file name) | ||||||
| // | // | ||||||
| @@ -121,7 +124,42 @@ protected: | |||||||
| 	Poco::Bugcheck::debugger(msg, __FILE__, __LINE__) | 	Poco::Bugcheck::debugger(msg, __FILE__, __LINE__) | ||||||
|  |  | ||||||
|  |  | ||||||
| } // namespace Poco | // | ||||||
|  | // poco_static_assert | ||||||
|  | //  | ||||||
|  | // The following was ported from <boost/static_assert.hpp> | ||||||
|  | // | ||||||
|  |  | ||||||
|  |  | ||||||
|  | template <bool x> | ||||||
|  | struct POCO_STATIC_ASSERTION_FAILURE; | ||||||
|  |  | ||||||
|  |  | ||||||
|  | template <>  | ||||||
|  | struct POCO_STATIC_ASSERTION_FAILURE<true>  | ||||||
|  | { | ||||||
|  | 	enum  | ||||||
|  | 	{  | ||||||
|  | 		value = 1  | ||||||
|  | 	};  | ||||||
|  | }; | ||||||
|  |  | ||||||
|  |  | ||||||
|  | template <int x>  | ||||||
|  | struct poco_static_assert_test | ||||||
|  | { | ||||||
|  | }; | ||||||
|  |  | ||||||
|  |  | ||||||
|  | #if defined(__GNUC__) && (__GNUC__ == 3) && ((__GNUC_MINOR__ == 3) || (__GNUC_MINOR__ == 4)) | ||||||
|  | #define poco_static_assert(B) \ | ||||||
|  | 	typedef char POCO_JOIN(poco_static_assert_typedef_, __LINE__) \ | ||||||
|  |         [POCO_STATIC_ASSERTION_FAILURE<(bool) (B)>::value] | ||||||
|  | #else | ||||||
|  | #define poco_static_assert(B) \ | ||||||
|  | 	typedef poco_static_assert_test<sizeof(POCO_STATIC_ASSERTION_FAILURE<(bool) (B)>)> \ | ||||||
|  | 		POCO_JOIN(poco_static_assert_typedef_, __LINE__) | ||||||
|  | #endif | ||||||
|  |  | ||||||
|  |  | ||||||
| #endif // Foundation_Bugcheck_INCLUDED | #endif // Foundation_Bugcheck_INCLUDED | ||||||
|   | |||||||
| @@ -1,7 +1,7 @@ | |||||||
| // | // | ||||||
| // ClassLibrary.h | // ClassLibrary.h | ||||||
| // | // | ||||||
| // $Id: //poco/Main/Foundation/include/Poco/ClassLibrary.h#2 $ | // $Id: //poco/Main/Foundation/include/Poco/ClassLibrary.h#3 $ | ||||||
| // | // | ||||||
| // Library: Foundation | // Library: Foundation | ||||||
| // Package: SharedLibrary | // Package: SharedLibrary | ||||||
| @@ -76,13 +76,13 @@ extern "C" | |||||||
| // | // | ||||||
| #define POCO_BEGIN_MANIFEST(base) \ | #define POCO_BEGIN_MANIFEST(base) \ | ||||||
| 	bool pocoBuildManifest(Poco::ManifestBase* pManifest_)							\ | 	bool pocoBuildManifest(Poco::ManifestBase* pManifest_)							\ | ||||||
| 	{																						\ | 	{																				\ | ||||||
| 		typedef base _Base;																	\ | 		typedef base _Base;															\ | ||||||
| 		typedef Poco::Manifest<_Base> _Manifest;										\ | 		typedef Poco::Manifest<_Base> _Manifest;									\ | ||||||
| 		std::string requiredType(typeid(_Manifest).name());									\ | 		std::string requiredType(typeid(_Manifest).name());							\ | ||||||
| 		std::string actualType(pManifest_->className());									\ | 		std::string actualType(pManifest_->className());							\ | ||||||
| 		if (requiredType == actualType)														\ | 		if (requiredType == actualType)												\ | ||||||
| 		{																					\ | 		{																			\ | ||||||
| 			Poco::Manifest<_Base>* pManifest = static_cast<_Manifest*>(pManifest_); | 			Poco::Manifest<_Base>* pManifest = static_cast<_Manifest*>(pManifest_); | ||||||
|  |  | ||||||
|  |  | ||||||
|   | |||||||
							
								
								
									
										159
									
								
								Foundation/include/Poco/Condition.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										159
									
								
								Foundation/include/Poco/Condition.h
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,159 @@ | |||||||
|  | // | ||||||
|  | // Condition.h | ||||||
|  | // | ||||||
|  | // $Id: //poco/Main/Foundation/include/Poco/Condition.h#1 $ | ||||||
|  | // | ||||||
|  | // Library: Foundation | ||||||
|  | // Package: Threading | ||||||
|  | // Module:  Condition | ||||||
|  | // | ||||||
|  | // Definition of the Condition class template. | ||||||
|  | // | ||||||
|  | // Copyright (c) 2007, Applied Informatics Software Engineering GmbH. | ||||||
|  | // and Contributors. | ||||||
|  | // | ||||||
|  | // Permission is hereby granted, free of charge, to any person or organization | ||||||
|  | // obtaining a copy of the software and accompanying documentation covered by | ||||||
|  | // this license (the "Software") to use, reproduce, display, distribute, | ||||||
|  | // execute, and transmit the Software, and to prepare derivative works of the | ||||||
|  | // Software, and to permit third-parties to whom the Software is furnished to | ||||||
|  | // do so, all subject to the following: | ||||||
|  | //  | ||||||
|  | // The copyright notices in the Software and this entire statement, including | ||||||
|  | // the above license grant, this restriction and the following disclaimer, | ||||||
|  | // must be included in all copies of the Software, in whole or in part, and | ||||||
|  | // all derivative works of the Software, unless such copies or derivative | ||||||
|  | // works are solely in the form of machine-executable object code generated by | ||||||
|  | // a source language processor. | ||||||
|  | //  | ||||||
|  | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||||||
|  | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||||||
|  | // FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT | ||||||
|  | // SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE | ||||||
|  | // FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE, | ||||||
|  | // ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER | ||||||
|  | // DEALINGS IN THE SOFTWARE. | ||||||
|  | // | ||||||
|  |  | ||||||
|  |  | ||||||
|  | #ifndef Foundation_Condition_INCLUDED | ||||||
|  | #define Foundation_Condition_INCLUDED | ||||||
|  |  | ||||||
|  |  | ||||||
|  | #include "Poco/Foundation.h" | ||||||
|  | #include "Poco/Mutex.h" | ||||||
|  | #include "Poco/ScopedUnlock.h" | ||||||
|  | #include "Poco/Event.h" | ||||||
|  | #include "Poco/Exception.h" | ||||||
|  | #include <deque> | ||||||
|  |  | ||||||
|  |  | ||||||
|  | namespace Poco { | ||||||
|  |  | ||||||
|  |  | ||||||
|  | class Foundation_API Condition | ||||||
|  | 	/// A Condition is a synchronization object used to block a thread  | ||||||
|  | 	/// until a particular condition is met.  | ||||||
|  | 	/// A Condition object is always used in conjunction with | ||||||
|  | 	/// a Mutex (or FastMutex) object. | ||||||
|  | 	/// | ||||||
|  | 	/// Condition objects are similar to POSIX condition variables, which the | ||||||
|  | 	/// difference that Condition is not subject to spurious wakeups. | ||||||
|  | 	/// | ||||||
|  | 	/// Threads waiting on a Condition are resumed in FIFO order. | ||||||
|  | { | ||||||
|  | public: | ||||||
|  | 	Condition(); | ||||||
|  | 		/// Creates the Condition. | ||||||
|  | 	 | ||||||
|  | 	~Condition(); | ||||||
|  | 		/// Destroys the Condition. | ||||||
|  | 	 | ||||||
|  | 	template <class Mtx> | ||||||
|  | 	void wait(Mtx& mutex) | ||||||
|  | 		/// Unlocks the mutex (which must be locked upon calling | ||||||
|  | 		/// wait()) and waits until the Condition is signalled. | ||||||
|  | 		/// | ||||||
|  | 		/// The given mutex will be locked again upon  | ||||||
|  | 		/// leaving the function, even in case of an exception. | ||||||
|  | 	{ | ||||||
|  | 		ScopedUnlock<Mtx> unlock(mutex, false); | ||||||
|  | 		Event event; | ||||||
|  | 		{ | ||||||
|  | 			FastMutex::ScopedLock lock(_mutex); | ||||||
|  | 			mutex.unlock(); | ||||||
|  | 			enqueue(event); | ||||||
|  | 		} | ||||||
|  | 		event.wait(); | ||||||
|  | 	} | ||||||
|  | 	 | ||||||
|  | 	template <class Mtx> | ||||||
|  | 	void wait(Mtx& mutex, long milliseconds) | ||||||
|  | 		/// Unlocks the mutex (which must be locked upon calling | ||||||
|  | 		/// wait()) and waits for the given time until the Condition is signalled. | ||||||
|  | 		/// | ||||||
|  | 		/// The given mutex will be locked again upon successfully leaving the  | ||||||
|  | 		/// function, even in case of an exception. | ||||||
|  | 		/// | ||||||
|  | 		/// Throws a TimeoutException if the Condition is not signalled | ||||||
|  | 		/// within the given time interval. | ||||||
|  | 	{ | ||||||
|  | 		if (!tryWait(mutex, milliseconds)) | ||||||
|  | 			throw TimeoutException(); | ||||||
|  | 	} | ||||||
|  | 	 | ||||||
|  | 	template <class Mtx> | ||||||
|  | 	bool tryWait(Mtx& mutex, long milliseconds) | ||||||
|  | 		/// Unlocks the mutex (which must be locked upon calling | ||||||
|  | 		/// tryWait()) and waits for the given time until the Condition is signalled. | ||||||
|  | 		/// | ||||||
|  | 		/// The given mutex will be locked again upon leaving the  | ||||||
|  | 		/// function, even in case of an exception. | ||||||
|  | 		/// | ||||||
|  | 		/// Returns true if the Condition has been signalled | ||||||
|  | 		/// within the given time interval, otherwise false. | ||||||
|  | 	{ | ||||||
|  | 		ScopedUnlock<Mtx> unlock(mutex, false); | ||||||
|  | 		Event event; | ||||||
|  | 		{ | ||||||
|  | 			FastMutex::ScopedLock lock(_mutex); | ||||||
|  | 			mutex.unlock(); | ||||||
|  | 			enqueue(event); | ||||||
|  | 		} | ||||||
|  | 		if (!event.tryWait(milliseconds)) | ||||||
|  | 		{ | ||||||
|  | 			FastMutex::ScopedLock lock(_mutex); | ||||||
|  | 			dequeue(event); | ||||||
|  | 			return false; | ||||||
|  | 		} | ||||||
|  | 		return true; | ||||||
|  | 	} | ||||||
|  | 	 | ||||||
|  | 	void signal(); | ||||||
|  | 		/// Signals the Condition and allows one waiting thread | ||||||
|  | 		/// to continue execution. | ||||||
|  |  | ||||||
|  | 	void broadcast(); | ||||||
|  | 		/// Signals the Condition and allows all waiting | ||||||
|  | 		/// threads to continue their execution. | ||||||
|  |  | ||||||
|  | protected: | ||||||
|  | 	void enqueue(Event& event); | ||||||
|  | 	void dequeue(); | ||||||
|  | 	void dequeue(Event& event); | ||||||
|  | 	 | ||||||
|  | private: | ||||||
|  | 	Condition(const Condition&); | ||||||
|  | 	Condition& operator = (const Condition&); | ||||||
|  | 	 | ||||||
|  | 	typedef std::deque<Event*> WaitQueue; | ||||||
|  | 	 | ||||||
|  | 	FastMutex _mutex; | ||||||
|  | 	WaitQueue _waitQueue; | ||||||
|  | }; | ||||||
|  |  | ||||||
|  |  | ||||||
|  | } // namespace Poco | ||||||
|  |  | ||||||
|  |  | ||||||
|  | #endif // Foundation_Condition_INCLUDED | ||||||
| @@ -1,7 +1,7 @@ | |||||||
| // | // | ||||||
| // DynamicAny.h | // DynamicAny.h | ||||||
| // | // | ||||||
| // $Id: //poco/Main/Foundation/include/Poco/DynamicAny.h#3 $ | // $Id: //poco/Main/Foundation/include/Poco/DynamicAny.h#4 $ | ||||||
| // | // | ||||||
| // Library: Poco | // Library: Poco | ||||||
| // Package: Core | // Package: Core | ||||||
| @@ -61,7 +61,7 @@ class Foundation_API DynamicAny | |||||||
| 	/// Precision loss, such as in conversion from floating-point types to integers or from double to float on platforms | 	/// Precision loss, such as in conversion from floating-point types to integers or from double to float on platforms | ||||||
| 	/// where they differ in size (provided internal actual value fits in float min/max range), is allowed. | 	/// where they differ in size (provided internal actual value fits in float min/max range), is allowed. | ||||||
| 	///  | 	///  | ||||||
| 	/// String truncation is allowed - it is possible to convert between string and character when string length is  | 	/// String truncation is allowed -- it is possible to convert between string and character when string length is  | ||||||
| 	/// greater than 1. An empty string gets converted to the char '\0', a non-empty string is truncated to the first character.  | 	/// greater than 1. An empty string gets converted to the char '\0', a non-empty string is truncated to the first character.  | ||||||
| 	/// | 	/// | ||||||
| 	/// Bolean conversion are performed as follows: | 	/// Bolean conversion are performed as follows: | ||||||
| @@ -99,23 +99,33 @@ public: | |||||||
|  |  | ||||||
| 	template <typename T>  | 	template <typename T>  | ||||||
| 	void convert(T& val) const | 	void convert(T& val) const | ||||||
| 		/// Invoke this method to perform conversion. | 		/// Invoke this method to perform a safe conversion. | ||||||
| 		/// | 		/// | ||||||
| 		/// Example usage: | 		/// Example usage: | ||||||
| 		///     DynamicAny any("42"); | 		///     DynamicAny any("42"); | ||||||
| 		///     int i; | 		///     int i; | ||||||
| 		///     any.convert(i); | 		///     any.convert(i); | ||||||
|  | 		/// | ||||||
|  | 		/// Throws a RangeException if the value does not fit | ||||||
|  | 		/// into the result variable. | ||||||
|  | 		/// Throws a NotImplementedException if conversion is | ||||||
|  | 		/// not available for the given type. | ||||||
| 	{ | 	{ | ||||||
| 		_pHolder->convert(val); | 		_pHolder->convert(val); | ||||||
| 	} | 	} | ||||||
| 	 | 	 | ||||||
| 	template <typename T>  | 	template <typename T>  | ||||||
| 	T convert() const | 	T convert() const | ||||||
| 		/// Invoke this method to perform conversion. | 		/// Invoke this method to perform a safe conversion. | ||||||
| 		/// | 		/// | ||||||
| 		/// Example usage: | 		/// Example usage: | ||||||
| 		///     DynamicAny any("42"); | 		///     DynamicAny any("42"); | ||||||
| 		///     int i = any.convert<int>(); | 		///     int i = any.convert<int>(); | ||||||
|  | 		/// | ||||||
|  | 		/// Throws a RangeException if the value does not fit | ||||||
|  | 		/// into the result variable. | ||||||
|  | 		/// Throws a NotImplementedException if conversion is | ||||||
|  | 		/// not available for the given type. | ||||||
| 	{ | 	{ | ||||||
| 		T result; | 		T result; | ||||||
| 		_pHolder->convert(result); | 		_pHolder->convert(result); | ||||||
| @@ -124,8 +134,13 @@ public: | |||||||
| 	 | 	 | ||||||
| 	template <typename T> | 	template <typename T> | ||||||
| 	operator T() const | 	operator T() const | ||||||
| 		/// Conversion operator for implicit type | 		/// Safe conversion operator for implicit type | ||||||
| 		/// conversions. | 		/// conversions. | ||||||
|  | 		/// | ||||||
|  | 		/// Throws a RangeException if the value does not fit | ||||||
|  | 		/// into the result variable. | ||||||
|  | 		/// Throws a NotImplementedException if conversion is | ||||||
|  | 		/// not available for the given type. | ||||||
| 	{ | 	{ | ||||||
| 		T result; | 		T result; | ||||||
| 		_pHolder->convert(result); | 		_pHolder->convert(result); | ||||||
|   | |||||||
| @@ -1,7 +1,7 @@ | |||||||
| // | // | ||||||
| // DynamicAnyHolder.h | // DynamicAnyHolder.h | ||||||
| // | // | ||||||
| // $Id: //poco/Main/Foundation/include/Poco/DynamicAnyHolder.h#2 $ | // $Id: //poco/Main/Foundation/include/Poco/DynamicAnyHolder.h#3 $ | ||||||
| // | // | ||||||
| // Library: Poco | // Library: Poco | ||||||
| // Package: Core | // Package: Core | ||||||
| @@ -48,35 +48,6 @@ | |||||||
| #include <typeinfo> | #include <typeinfo> | ||||||
| #include <limits> | #include <limits> | ||||||
|  |  | ||||||
| ///BEGIN ported from boost |  | ||||||
| /// following macros were ported from boost to help the DynamicAnyHolder development |  | ||||||
| /// for complete multi-platform code, see static_assert.hpp in boost libraries |  | ||||||
|  |  | ||||||
| // Helper macro POCO_JOIN: |  | ||||||
| // The following piece of macro magic joins the two |  | ||||||
| // arguments together, even when one of the arguments is |  | ||||||
| // itself a macro (see 16.3.1 in C++ standard).  The key |  | ||||||
| // is that macro expansion of macro arguments does not |  | ||||||
| // occur in POCO_DO_JOIN2 but does in POCO_DO_JOIN. |  | ||||||
| // |  | ||||||
| #define POCO_JOIN(X, Y) POCO_DO_JOIN( X, Y ) |  | ||||||
| #define POCO_DO_JOIN(X, Y) POCO_DO_JOIN2(X,Y) |  | ||||||
| #define POCO_DO_JOIN2(X, Y) X##Y |  | ||||||
|  |  | ||||||
| template <bool x> struct STATIC_ASSERTION_FAILURE; |  | ||||||
| template <> struct STATIC_ASSERTION_FAILURE<true> { enum { value = 1 }; }; |  | ||||||
| template<int x> struct static_assert_test{}; |  | ||||||
|  |  | ||||||
| #if defined(__GNUC__) && (__GNUC__ == 3) && ((__GNUC_MINOR__ == 3) || (__GNUC_MINOR__ == 4)) |  | ||||||
| # define poco_static_assert( B ) \ |  | ||||||
|     typedef char POCO_JOIN(poco_static_assert_typedef_, __LINE__) \ |  | ||||||
|         [ STATIC_ASSERTION_FAILURE< (bool)(B) >::value ] |  | ||||||
| #else |  | ||||||
| # define poco_static_assert(B) \ |  | ||||||
|    typedef static_assert_test<sizeof(STATIC_ASSERTION_FAILURE<(bool)(B)>)> poco_static_assert_typedef_ |  | ||||||
| #endif |  | ||||||
| ///END ported from boost |  | ||||||
|  |  | ||||||
|  |  | ||||||
| namespace Poco { | namespace Poco { | ||||||
|  |  | ||||||
| @@ -203,7 +174,6 @@ private: | |||||||
| 		if (from < std::numeric_limits<T>::min())  | 		if (from < std::numeric_limits<T>::min())  | ||||||
| 			throw RangeException("Value too small."); | 			throw RangeException("Value too small."); | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| }; | }; | ||||||
|  |  | ||||||
|  |  | ||||||
| @@ -326,7 +296,6 @@ class DynamicAnyHolderImpl: public DynamicAnyHolder | |||||||
| }; | }; | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
| template <> | template <> | ||||||
| class DynamicAnyHolderImpl<Int8>: public DynamicAnyHolder | class DynamicAnyHolderImpl<Int8>: public DynamicAnyHolder | ||||||
| { | { | ||||||
| @@ -419,7 +388,6 @@ private: | |||||||
| }; | }; | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
| template <> | template <> | ||||||
| class DynamicAnyHolderImpl<Int16>: public DynamicAnyHolder | class DynamicAnyHolderImpl<Int16>: public DynamicAnyHolder | ||||||
| { | { | ||||||
|   | |||||||
| @@ -1,7 +1,7 @@ | |||||||
| // | // | ||||||
| // Event.h | // Event.h | ||||||
| // | // | ||||||
| // $Id: //poco/Main/Foundation/include/Poco/Event.h#2 $ | // $Id: //poco/Main/Foundation/include/Poco/Event.h#3 $ | ||||||
| // | // | ||||||
| // Library: Foundation | // Library: Foundation | ||||||
| // Package: Threading | // Package: Threading | ||||||
| @@ -84,7 +84,7 @@ public: | |||||||
|  |  | ||||||
| 	void wait(long milliseconds); | 	void wait(long milliseconds); | ||||||
| 		/// Waits for the event to become signalled. | 		/// Waits for the event to become signalled. | ||||||
| 		/// Throws a TimeOutException if the event | 		/// Throws a TimeoutException if the event | ||||||
| 		/// does not become signalled within the specified | 		/// does not become signalled within the specified | ||||||
| 		/// time interval. | 		/// time interval. | ||||||
|  |  | ||||||
|   | |||||||
| @@ -1,7 +1,7 @@ | |||||||
| // | // | ||||||
| // File.h | // File.h | ||||||
| // | // | ||||||
| // $Id: //poco/Main/Foundation/include/Poco/File.h#4 $ | // $Id: //poco/Main/Foundation/include/Poco/File.h#5 $ | ||||||
| // | // | ||||||
| // Library: Foundation | // Library: Foundation | ||||||
| // Package: Filesystem | // Package: Filesystem | ||||||
| @@ -164,12 +164,14 @@ public: | |||||||
| 		/// Does nothing on Windows and OpenVMS.	 | 		/// Does nothing on Windows and OpenVMS.	 | ||||||
| 		 | 		 | ||||||
| 	void copyTo(const std::string& path) const; | 	void copyTo(const std::string& path) const; | ||||||
| 		/// Copies the file to the given path. The target path | 		/// Copies the file (or directory) to the given path.  | ||||||
| 		/// can be a directory. | 		/// The target path can be a directory. | ||||||
|  | 		/// | ||||||
|  | 		/// A directory is copied recursively. | ||||||
|  |  | ||||||
| 	void moveTo(const std::string& path); | 	void moveTo(const std::string& path); | ||||||
| 		/// Copies the file to the given path and removes the | 		/// Copies the file (or directory) to the given path and  | ||||||
| 		/// original file. The target path can be a directory. | 		/// removes the original file. The target path can be a directory. | ||||||
| 		 | 		 | ||||||
| 	void renameTo(const std::string& path); | 	void renameTo(const std::string& path); | ||||||
| 		/// Renames the file to the new name. | 		/// Renames the file to the new name. | ||||||
| @@ -212,6 +214,10 @@ public: | |||||||
| 	static void handleLastError(const std::string& path); | 	static void handleLastError(const std::string& path); | ||||||
| 		/// For internal use only. Throws an appropriate | 		/// For internal use only. Throws an appropriate | ||||||
| 		/// exception for the last file-related error. | 		/// exception for the last file-related error. | ||||||
|  |  | ||||||
|  | protected: | ||||||
|  | 	void copyDirectory(const std::string& path) const; | ||||||
|  | 		/// Copies a directory. Used internally by copyTo(). | ||||||
| }; | }; | ||||||
|  |  | ||||||
|  |  | ||||||
|   | |||||||
| @@ -1,7 +1,7 @@ | |||||||
| // | // | ||||||
| // Foundation.h | // Foundation.h | ||||||
| // | // | ||||||
| // $Id: //poco/Main/Foundation/include/Poco/Foundation.h#6 $ | // $Id: //poco/Main/Foundation/include/Poco/Foundation.h#7 $ | ||||||
| // | // | ||||||
| // Library: Foundation | // Library: Foundation | ||||||
| // Package: Core | // Package: Core | ||||||
| @@ -93,6 +93,20 @@ | |||||||
| #endif | #endif | ||||||
|  |  | ||||||
|  |  | ||||||
|  | // | ||||||
|  | // POCO_JOIN | ||||||
|  | // | ||||||
|  | // The following piece of macro magic joins the two | ||||||
|  | // arguments together, even when one of the arguments is | ||||||
|  | // itself a macro (see 16.3.1 in C++ standard).  The key | ||||||
|  | // is that macro expansion of macro arguments does not | ||||||
|  | // occur in POCO_DO_JOIN2 but does in POCO_DO_JOIN. | ||||||
|  | // | ||||||
|  | #define POCO_JOIN(X, Y) POCO_DO_JOIN( X, Y ) | ||||||
|  | #define POCO_DO_JOIN(X, Y) POCO_DO_JOIN2(X,Y) | ||||||
|  | #define POCO_DO_JOIN2(X, Y) X##Y | ||||||
|  |  | ||||||
|  |  | ||||||
| // | // | ||||||
| // Pull in basic definitions | // Pull in basic definitions | ||||||
| // | // | ||||||
|   | |||||||
| @@ -1,7 +1,7 @@ | |||||||
| // | // | ||||||
| // Latin1Encoding.h | // Latin1Encoding.h | ||||||
| // | // | ||||||
| // $Id: //poco/Main/Foundation/include/Poco/Latin1Encoding.h#2 $ | // $Id: //poco/Main/Foundation/include/Poco/Latin1Encoding.h#3 $ | ||||||
| // | // | ||||||
| // Library: Foundation | // Library: Foundation | ||||||
| // Package: Text | // Package: Text | ||||||
| @@ -9,7 +9,7 @@ | |||||||
| // | // | ||||||
| // Definition of the Latin1Encoding class. | // Definition of the Latin1Encoding class. | ||||||
| // | // | ||||||
| // Copyright (c) 2004-2006, Applied Informatics Software Engineering GmbH. | // Copyright (c) 2004-2007, Applied Informatics Software Engineering GmbH. | ||||||
| // and Contributors. | // and Contributors. | ||||||
| // | // | ||||||
| // Permission is hereby granted, free of charge, to any person or organization | // Permission is hereby granted, free of charge, to any person or organization | ||||||
| @@ -53,11 +53,14 @@ class Foundation_API Latin1Encoding: public TextEncoding | |||||||
| public: | public: | ||||||
| 	Latin1Encoding(); | 	Latin1Encoding(); | ||||||
| 	~Latin1Encoding(); | 	~Latin1Encoding(); | ||||||
|  | 	const char* canonicalName() const; | ||||||
|  | 	bool isA(const std::string& encodingName) const; | ||||||
| 	const CharacterMap& characterMap() const; | 	const CharacterMap& characterMap() const; | ||||||
| 	int convert(const unsigned char* bytes) const; | 	int convert(const unsigned char* bytes) const; | ||||||
| 	int convert(int ch, unsigned char* bytes, int length) const; | 	int convert(int ch, unsigned char* bytes, int length) const; | ||||||
| 	 | 	 | ||||||
| private: | private: | ||||||
|  | 	static const char* _names[]; | ||||||
| 	static const CharacterMap _charMap; | 	static const CharacterMap _charMap; | ||||||
| }; | }; | ||||||
|  |  | ||||||
|   | |||||||
| @@ -1,7 +1,7 @@ | |||||||
| // | // | ||||||
| // Latin9Encoding.h | // Latin9Encoding.h | ||||||
| // | // | ||||||
| // $Id: //poco/Main/Foundation/include/Poco/Latin9Encoding.h#2 $ | // $Id: //poco/Main/Foundation/include/Poco/Latin9Encoding.h#3 $ | ||||||
| // | // | ||||||
| // Library: Foundation | // Library: Foundation | ||||||
| // Package: Text | // Package: Text | ||||||
| @@ -9,7 +9,7 @@ | |||||||
| // | // | ||||||
| // Definition of the Latin9Encoding class. | // Definition of the Latin9Encoding class. | ||||||
| // | // | ||||||
| // Copyright (c) 2004-2006, Applied Informatics Software Engineering GmbH. | // Copyright (c) 2004-2007, Applied Informatics Software Engineering GmbH. | ||||||
| // and Contributors. | // and Contributors. | ||||||
| // | // | ||||||
| // Permission is hereby granted, free of charge, to any person or organization | // Permission is hereby granted, free of charge, to any person or organization | ||||||
| @@ -56,11 +56,14 @@ class Foundation_API Latin9Encoding: public TextEncoding | |||||||
| public: | public: | ||||||
| 	Latin9Encoding(); | 	Latin9Encoding(); | ||||||
| 	~Latin9Encoding(); | 	~Latin9Encoding(); | ||||||
|  | 	const char* canonicalName() const; | ||||||
|  | 	bool isA(const std::string& encodingName) const; | ||||||
| 	const CharacterMap& characterMap() const; | 	const CharacterMap& characterMap() const; | ||||||
| 	int convert(const unsigned char* bytes) const; | 	int convert(const unsigned char* bytes) const; | ||||||
| 	int convert(int ch, unsigned char* bytes, int length) const; | 	int convert(int ch, unsigned char* bytes, int length) const; | ||||||
| 	 | 	 | ||||||
| private: | private: | ||||||
|  | 	static const char* _names[]; | ||||||
| 	static const CharacterMap _charMap; | 	static const CharacterMap _charMap; | ||||||
| }; | }; | ||||||
|  |  | ||||||
|   | |||||||
| @@ -1,7 +1,7 @@ | |||||||
| // | // | ||||||
| // Path.h | // Path.h | ||||||
| // | // | ||||||
| // $Id: //poco/Main/Foundation/include/Poco/Path.h#5 $ | // $Id: //poco/Main/Foundation/include/Poco/Path.h#6 $ | ||||||
| // | // | ||||||
| // Library: Foundation | // Library: Foundation | ||||||
| // Package: Filesystem | // Package: Filesystem | ||||||
| @@ -96,6 +96,10 @@ public: | |||||||
| 		/// Creates a path from a parent path and a filename. | 		/// Creates a path from a parent path and a filename. | ||||||
| 		/// The parent path is expected to reference a directory. | 		/// The parent path is expected to reference a directory. | ||||||
|  |  | ||||||
|  | 	Path(const Path& parent, const char* fileName); | ||||||
|  | 		/// Creates a path from a parent path and a filename. | ||||||
|  | 		/// The parent path is expected to reference a directory. | ||||||
|  |  | ||||||
| 	Path(const Path& parent, const Path& relative); | 	Path(const Path& parent, const Path& relative); | ||||||
| 		/// Creates a path from a parent path and a relative path. | 		/// Creates a path from a parent path and a relative path. | ||||||
| 		/// The parent path is expected to reference a directory. | 		/// The parent path is expected to reference a directory. | ||||||
|   | |||||||
							
								
								
									
										79
									
								
								Foundation/include/Poco/ScopedUnlock.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										79
									
								
								Foundation/include/Poco/ScopedUnlock.h
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,79 @@ | |||||||
|  | // | ||||||
|  | // ScopedUnlock.h | ||||||
|  | // | ||||||
|  | // $Id: //poco/Main/Foundation/include/Poco/ScopedUnlock.h#1 $ | ||||||
|  | // | ||||||
|  | // Library: Foundation | ||||||
|  | // Package: Threading | ||||||
|  | // Module:  Mutex | ||||||
|  | // | ||||||
|  | // Definition of the ScopedUnlock template class. | ||||||
|  | // | ||||||
|  | // Copyright (c) 2007, Applied Informatics Software Engineering GmbH. | ||||||
|  | // and Contributors. | ||||||
|  | // | ||||||
|  | // Permission is hereby granted, free of charge, to any person or organization | ||||||
|  | // obtaining a copy of the software and accompanying documentation covered by | ||||||
|  | // this license (the "Software") to use, reproduce, display, distribute, | ||||||
|  | // execute, and transmit the Software, and to prepare derivative works of the | ||||||
|  | // Software, and to permit third-parties to whom the Software is furnished to | ||||||
|  | // do so, all subject to the following: | ||||||
|  | //  | ||||||
|  | // The copyright notices in the Software and this entire statement, including | ||||||
|  | // the above license grant, this restriction and the following disclaimer, | ||||||
|  | // must be included in all copies of the Software, in whole or in part, and | ||||||
|  | // all derivative works of the Software, unless such copies or derivative | ||||||
|  | // works are solely in the form of machine-executable object code generated by | ||||||
|  | // a source language processor. | ||||||
|  | //  | ||||||
|  | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||||||
|  | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||||||
|  | // FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT | ||||||
|  | // SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE | ||||||
|  | // FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE, | ||||||
|  | // ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER | ||||||
|  | // DEALINGS IN THE SOFTWARE. | ||||||
|  | // | ||||||
|  |  | ||||||
|  |  | ||||||
|  | #ifndef Foundation_ScopedUnlock_INCLUDED | ||||||
|  | #define Foundation_ScopedUnlock_INCLUDED | ||||||
|  |  | ||||||
|  |  | ||||||
|  | #include "Poco/Foundation.h" | ||||||
|  |  | ||||||
|  |  | ||||||
|  | namespace Poco { | ||||||
|  |  | ||||||
|  |  | ||||||
|  | template <class M> | ||||||
|  | class ScopedUnlock | ||||||
|  | 	/// A class that simplifies thread synchronization | ||||||
|  | 	/// with a mutex. | ||||||
|  | 	/// The constructor accepts a Mutex and unlocks it. | ||||||
|  | 	/// The destructor unlocks the mutex. | ||||||
|  | { | ||||||
|  | public: | ||||||
|  | 	inline ScopedUnlock(M& mutex, bool unlockNow = true): _mutex(mutex) | ||||||
|  | 	{ | ||||||
|  | 		if (unlockNow) | ||||||
|  | 			_mutex.unlock(); | ||||||
|  | 	} | ||||||
|  | 	inline ~ScopedUnlock() | ||||||
|  | 	{ | ||||||
|  | 		_mutex.lock(); | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | private: | ||||||
|  | 	M& _mutex; | ||||||
|  |  | ||||||
|  | 	ScopedUnlock(); | ||||||
|  | 	ScopedUnlock(const ScopedUnlock&); | ||||||
|  | 	ScopedUnlock& operator = (const ScopedUnlock&); | ||||||
|  | }; | ||||||
|  |  | ||||||
|  |  | ||||||
|  | } // namespace Poco | ||||||
|  |  | ||||||
|  |  | ||||||
|  | #endif // Foundation_ScopedUnlock_INCLUDED | ||||||
| @@ -1,7 +1,7 @@ | |||||||
| // | // | ||||||
| // Semaphore.h | // Semaphore.h | ||||||
| // | // | ||||||
| // $Id: //poco/Main/Foundation/include/Poco/Semaphore.h#2 $ | // $Id: //poco/Main/Foundation/include/Poco/Semaphore.h#3 $ | ||||||
| // | // | ||||||
| // Library: Foundation | // Library: Foundation | ||||||
| // Package: Threading | // Package: Threading | ||||||
| @@ -100,7 +100,7 @@ public: | |||||||
| 		/// Waits for the semaphore to become signalled. | 		/// Waits for the semaphore to become signalled. | ||||||
| 		/// To become signalled, a semaphore's value must | 		/// To become signalled, a semaphore's value must | ||||||
| 		/// be greater than zero. | 		/// be greater than zero. | ||||||
| 		/// Throws a TimeOutException if the semaphore | 		/// Throws a TimeoutException if the semaphore | ||||||
| 		/// does not become signalled within the specified | 		/// does not become signalled within the specified | ||||||
| 		/// time interval. | 		/// time interval. | ||||||
| 		/// Decrements the semaphore's value by one | 		/// Decrements the semaphore's value by one | ||||||
|   | |||||||
| @@ -1,7 +1,7 @@ | |||||||
| // | // | ||||||
| // String.h | // String.h | ||||||
| // | // | ||||||
| // $Id: //poco/Main/Foundation/include/Poco/String.h#5 $ | // $Id: //poco/Main/Foundation/include/Poco/String.h#6 $ | ||||||
| // | // | ||||||
| // Library: Foundation | // Library: Foundation | ||||||
| // Package: Core | // Package: Core | ||||||
| @@ -475,7 +475,7 @@ S& replaceInPlace(S& str, const typename S::value_type* from, const typename S:: | |||||||
|  |  | ||||||
| 	S result; | 	S result; | ||||||
| 	typename S::size_type pos = 0; | 	typename S::size_type pos = 0; | ||||||
| 	typename S::size_type fromLen = strlen(from); | 	typename S::size_type fromLen = std::strlen(from); | ||||||
| 	result.append(str, 0, start); | 	result.append(str, 0, start); | ||||||
| 	do | 	do | ||||||
| 	{ | 	{ | ||||||
|   | |||||||
| @@ -1,7 +1,7 @@ | |||||||
| // | // | ||||||
| // SynchronizedObject.h | // SynchronizedObject.h | ||||||
| // | // | ||||||
| // $Id: //poco/Main/Foundation/include/Poco/SynchronizedObject.h#3 $ | // $Id: //poco/Main/Foundation/include/Poco/SynchronizedObject.h#4 $ | ||||||
| // | // | ||||||
| // Library: Foundation | // Library: Foundation | ||||||
| // Package: Threading | // Package: Threading | ||||||
| @@ -86,7 +86,7 @@ public: | |||||||
|  |  | ||||||
| 	void wait(long milliseconds) const; | 	void wait(long milliseconds) const; | ||||||
| 		/// Waits for the object to become signalled. | 		/// Waits for the object to become signalled. | ||||||
| 		/// Throws a TimeOutException if the object | 		/// Throws a TimeoutException if the object | ||||||
| 		/// does not become signalled within the specified | 		/// does not become signalled within the specified | ||||||
| 		/// time interval. | 		/// time interval. | ||||||
|  |  | ||||||
|   | |||||||
| @@ -1,7 +1,7 @@ | |||||||
| // | // | ||||||
| // TextEncoding.h | // TextEncoding.h | ||||||
| // | // | ||||||
| // $Id: //poco/Main/Foundation/include/Poco/TextEncoding.h#2 $ | // $Id: //poco/Main/Foundation/include/Poco/TextEncoding.h#4 $ | ||||||
| // | // | ||||||
| // Library: Foundation | // Library: Foundation | ||||||
| // Package: Text | // Package: Text | ||||||
| @@ -9,7 +9,7 @@ | |||||||
| // | // | ||||||
| // Definition of the abstract TextEncoding class. | // Definition of the abstract TextEncoding class. | ||||||
| // | // | ||||||
| // Copyright (c) 2004-2006, Applied Informatics Software Engineering GmbH. | // Copyright (c) 2004-2007, Applied Informatics Software Engineering GmbH. | ||||||
| // and Contributors. | // and Contributors. | ||||||
| // | // | ||||||
| // Permission is hereby granted, free of charge, to any person or organization | // Permission is hereby granted, free of charge, to any person or organization | ||||||
| @@ -41,19 +41,30 @@ | |||||||
|  |  | ||||||
|  |  | ||||||
| #include "Poco/Foundation.h" | #include "Poco/Foundation.h" | ||||||
|  | #include "Poco/SharedPtr.h" | ||||||
|  |  | ||||||
|  |  | ||||||
| namespace Poco { | namespace Poco { | ||||||
|  |  | ||||||
|  |  | ||||||
|  | class TextEncodingManager; | ||||||
|  |  | ||||||
|  |  | ||||||
| class Foundation_API TextEncoding | class Foundation_API TextEncoding | ||||||
| 	/// An abstract base class for implementing text encodings | 	/// An abstract base class for implementing text encodings | ||||||
| 	/// like UTF-8 or ISO 8859-1.  | 	/// like UTF-8 or ISO 8859-1.  | ||||||
| 	/// | 	/// | ||||||
| 	/// Subclasses must override the characterMap() and convert() | 	/// Subclasses must override the canonicalName(), isA(), | ||||||
| 	/// methods. | 	/// characterMap() and convert() methods and need to be | ||||||
|  | 	/// thread safe and stateless. | ||||||
|  | 	/// | ||||||
|  | 	/// TextEncoding also provides static member functions | ||||||
|  | 	/// for managing mappings from encoding names to | ||||||
|  | 	/// TextEncoding objects. | ||||||
| { | { | ||||||
| public: | public: | ||||||
|  | 	typedef SharedPtr<TextEncoding> Ptr; | ||||||
|  | 	 | ||||||
| 	enum | 	enum | ||||||
| 	{ | 	{ | ||||||
| 		MAX_SEQUENCE_LENGTH = 6 /// The maximum character byte sequence length supported. | 		MAX_SEQUENCE_LENGTH = 6 /// The maximum character byte sequence length supported. | ||||||
| @@ -70,6 +81,17 @@ public: | |||||||
|  |  | ||||||
| 	virtual ~TextEncoding(); | 	virtual ~TextEncoding(); | ||||||
| 		/// Destroys the encoding. | 		/// Destroys the encoding. | ||||||
|  |  | ||||||
|  | 	virtual const char* canonicalName() const = 0; | ||||||
|  | 		/// Returns the canonical name of this encoding, | ||||||
|  | 		/// e.g. "ISO-8859-1". Encoding name comparisons are case | ||||||
|  | 		/// insensitive. | ||||||
|  |  | ||||||
|  | 	virtual bool isA(const std::string& encodingName) const = 0; | ||||||
|  | 		/// Returns true if the given name is one of the names of this encoding. | ||||||
|  | 		/// For example, the "ISO-8859-1" encoding is also known as "Latin-1". | ||||||
|  | 		/// | ||||||
|  | 		/// Encoding name comparision are be case insensitive. | ||||||
| 			 | 			 | ||||||
| 	virtual const CharacterMap& characterMap() const = 0; | 	virtual const CharacterMap& characterMap() const = 0; | ||||||
| 		/// Returns the CharacterMap for the encoding. | 		/// Returns the CharacterMap for the encoding. | ||||||
| @@ -97,6 +119,49 @@ public: | |||||||
| 		/// If the character cannot be converted, 0 is returned and | 		/// If the character cannot be converted, 0 is returned and | ||||||
| 		/// the byte sequence remains unchanged. | 		/// the byte sequence remains unchanged. | ||||||
| 		/// The default implementation simply returns 0. | 		/// The default implementation simply returns 0. | ||||||
|  |  | ||||||
|  | 	static TextEncoding& byName(const std::string& encodingName); | ||||||
|  | 		/// Returns the TextEncoding object for the given encoding name. | ||||||
|  | 		/// | ||||||
|  | 		/// Throws a NotFoundException if the encoding with given name is not available. | ||||||
|  | 		 | ||||||
|  | 	static TextEncoding::Ptr find(const std::string& encodingName); | ||||||
|  | 		/// Returns a pointer to the TextEncoding object for the given encodingName, | ||||||
|  | 		/// or NULL if no such TextEncoding object exists. | ||||||
|  |  | ||||||
|  | 	static void add(TextEncoding::Ptr encoding); | ||||||
|  | 		/// Adds the given TextEncoding to the table of text encodings, | ||||||
|  | 		/// under the encoding's canonical name. | ||||||
|  | 		/// | ||||||
|  | 		/// If an encoding with the given name is already registered, | ||||||
|  | 		/// it is replaced. | ||||||
|  |  | ||||||
|  | 	static void add(TextEncoding::Ptr encoding, const std::string& name); | ||||||
|  | 		/// Adds the given TextEncoding to the table of text encodings, | ||||||
|  | 		/// under the given name. | ||||||
|  | 		/// | ||||||
|  | 		/// If an encoding with the given name is already registered, | ||||||
|  | 		/// it is replaced. | ||||||
|  |  | ||||||
|  | 	static void remove(const std::string& encodingName); | ||||||
|  | 		/// Removes the encoding with the given name from the table | ||||||
|  | 		/// of text encodings. | ||||||
|  |  | ||||||
|  | 	static TextEncoding::Ptr global(TextEncoding::Ptr encoding); | ||||||
|  | 		/// Sets global TextEncoding object. | ||||||
|  | 		/// | ||||||
|  | 		/// This function sets the global encoding to the argument and returns a | ||||||
|  | 		/// reference of the previous global encoding. | ||||||
|  |  | ||||||
|  | 	static TextEncoding& global(); | ||||||
|  | 		/// Return the current global TextEncoding object | ||||||
|  |  | ||||||
|  | 	static const std::string GLOBAL; | ||||||
|  | 		/// Name of the global TextEncoding, which is the empty string. | ||||||
|  | 		 | ||||||
|  | protected: | ||||||
|  | 	static TextEncodingManager& manager(); | ||||||
|  | 		/// Returns the TextEncodingManager. | ||||||
| }; | }; | ||||||
|  |  | ||||||
|  |  | ||||||
|   | |||||||
| @@ -1,7 +1,7 @@ | |||||||
| // | // | ||||||
| // Thread.h | // Thread.h | ||||||
| // | // | ||||||
| // $Id: //poco/Main/Foundation/include/Poco/Thread.h#2 $ | // $Id: //poco/Main/Foundation/include/Poco/Thread.h#3 $ | ||||||
| // | // | ||||||
| // Library: Foundation | // Library: Foundation | ||||||
| // Package: Threading | // Package: Threading | ||||||
| @@ -107,6 +107,16 @@ public: | |||||||
| 		/// Waits until the thread completes execution.	 | 		/// Waits until the thread completes execution.	 | ||||||
| 		/// If multiple threads try to join the same | 		/// If multiple threads try to join the same | ||||||
| 		/// thread, the result is undefined. | 		/// thread, the result is undefined. | ||||||
|  | 		 | ||||||
|  | 	void join(long milliseconds); | ||||||
|  | 		/// Waits for at most the given interval for the thread | ||||||
|  | 		/// to complete. Throws a TimeoutException if the thread | ||||||
|  | 		/// does not complete within the specified time interval. | ||||||
|  | 		 | ||||||
|  | 	bool tryJoin(long milliseconds); | ||||||
|  | 		/// Waits for at most the given interval for the thread | ||||||
|  | 		/// to complete. Returns true if the thread has finished, | ||||||
|  | 		/// false otherwise. | ||||||
|  |  | ||||||
| 	bool isRunning() const; | 	bool isRunning() const; | ||||||
| 		/// Returns true if the thread is running. | 		/// Returns true if the thread is running. | ||||||
|   | |||||||
| @@ -1,7 +1,7 @@ | |||||||
| // | // | ||||||
| // Thread_POSIX.h | // Thread_POSIX.h | ||||||
| // | // | ||||||
| // $Id: //poco/Main/Foundation/include/Poco/Thread_POSIX.h#2 $ | // $Id: //poco/Main/Foundation/include/Poco/Thread_POSIX.h#5 $ | ||||||
| // | // | ||||||
| // Library: Foundation | // Library: Foundation | ||||||
| // Package: Threading | // Package: Threading | ||||||
| @@ -9,7 +9,7 @@ | |||||||
| // | // | ||||||
| // Definition of the ThreadImpl class for POSIX Threads. | // Definition of the ThreadImpl class for POSIX Threads. | ||||||
| // | // | ||||||
| // Copyright (c) 2004-2006, Applied Informatics Software Engineering GmbH. | // Copyright (c) 2004-2007, Applied Informatics Software Engineering GmbH. | ||||||
| // and Contributors. | // and Contributors. | ||||||
| // | // | ||||||
| // Permission is hereby granted, free of charge, to any person or organization | // Permission is hereby granted, free of charge, to any person or organization | ||||||
| @@ -43,6 +43,9 @@ | |||||||
| #include "Poco/Foundation.h" | #include "Poco/Foundation.h" | ||||||
| #include "Poco/Runnable.h" | #include "Poco/Runnable.h" | ||||||
| #include "Poco/SignalHandler.h" | #include "Poco/SignalHandler.h" | ||||||
|  | #include "Poco/Event.h" | ||||||
|  | #include "Poco/RefCountedObject.h" | ||||||
|  | #include "Poco/AutoPtr.h" | ||||||
| #include <pthread.h> | #include <pthread.h> | ||||||
| #if !defined(POCO_NO_SYS_SELECT_H) | #if !defined(POCO_NO_SYS_SELECT_H) | ||||||
| #include <sys/select.h> | #include <sys/select.h> | ||||||
| @@ -74,6 +77,7 @@ public: | |||||||
| 	void startImpl(Runnable& target); | 	void startImpl(Runnable& target); | ||||||
|  |  | ||||||
| 	void joinImpl(); | 	void joinImpl(); | ||||||
|  | 	bool joinImpl(long milliseconds); | ||||||
| 	bool isRunningImpl() const; | 	bool isRunningImpl() const; | ||||||
| 	static void sleepImpl(long milliseconds); | 	static void sleepImpl(long milliseconds); | ||||||
| 	static void yieldImpl(); | 	static void yieldImpl(); | ||||||
| @@ -84,9 +88,23 @@ protected: | |||||||
| 	static int mapPrio(int prio); | 	static int mapPrio(int prio); | ||||||
|  |  | ||||||
| private: | private: | ||||||
| 	Runnable* _pTarget; | 	struct ThreadData: public RefCountedObject | ||||||
| 	pthread_t _thread; | 	{ | ||||||
| 	int       _prio; | 		ThreadData(): | ||||||
|  | 			pTarget(0), | ||||||
|  | 			thread(0), | ||||||
|  | 			prio(PRIO_NORMAL_IMPL), | ||||||
|  | 			done(false) | ||||||
|  | 		{ | ||||||
|  | 		} | ||||||
|  |  | ||||||
|  | 		Runnable* pTarget; | ||||||
|  | 		pthread_t thread; | ||||||
|  | 		int       prio; | ||||||
|  | 		Event     done; | ||||||
|  | 	}; | ||||||
|  | 	 | ||||||
|  | 	AutoPtr<ThreadData> _pData; | ||||||
| 	 | 	 | ||||||
| 	static pthread_key_t _currentKey; | 	static pthread_key_t _currentKey; | ||||||
| 	static bool          _haveCurrentKey; | 	static bool          _haveCurrentKey; | ||||||
| @@ -103,7 +121,7 @@ private: | |||||||
| // | // | ||||||
| inline int ThreadImpl::getPriorityImpl() const | inline int ThreadImpl::getPriorityImpl() const | ||||||
| { | { | ||||||
| 	return _prio; | 	return _pData->prio; | ||||||
| } | } | ||||||
|  |  | ||||||
|  |  | ||||||
|   | |||||||
| @@ -1,7 +1,7 @@ | |||||||
| // | // | ||||||
| // Thread_WIN32.h | // Thread_WIN32.h | ||||||
| // | // | ||||||
| // $Id: //poco/Main/Foundation/include/Poco/Thread_WIN32.h#2 $ | // $Id: //poco/Main/Foundation/include/Poco/Thread_WIN32.h#3 $ | ||||||
| // | // | ||||||
| // Library: Foundation | // Library: Foundation | ||||||
| // Package: Threading | // Package: Threading | ||||||
| @@ -68,6 +68,7 @@ public: | |||||||
| 	void startImpl(Runnable& target); | 	void startImpl(Runnable& target); | ||||||
|  |  | ||||||
| 	void joinImpl(); | 	void joinImpl(); | ||||||
|  | 	bool joinImpl(long milliseconds); | ||||||
| 	bool isRunningImpl() const; | 	bool isRunningImpl() const; | ||||||
| 	static void sleepImpl(long milliseconds); | 	static void sleepImpl(long milliseconds); | ||||||
| 	static void yieldImpl(); | 	static void yieldImpl(); | ||||||
|   | |||||||
| @@ -1,7 +1,7 @@ | |||||||
| // | // | ||||||
| // UTF16Encoding.h | // UTF16Encoding.h | ||||||
| // | // | ||||||
| // $Id: //poco/Main/Foundation/include/Poco/UTF16Encoding.h#2 $ | // $Id: //poco/Main/Foundation/include/Poco/UTF16Encoding.h#3 $ | ||||||
| // | // | ||||||
| // Library: Foundation | // Library: Foundation | ||||||
| // Package: Text | // Package: Text | ||||||
| @@ -9,7 +9,7 @@ | |||||||
| // | // | ||||||
| // Definition of the UTF16Encoding class. | // Definition of the UTF16Encoding class. | ||||||
| // | // | ||||||
| // Copyright (c) 2004-2006, Applied Informatics Software Engineering GmbH. | // Copyright (c) 2004-2007, Applied Informatics Software Engineering GmbH. | ||||||
| // and Contributors. | // and Contributors. | ||||||
| // | // | ||||||
| // Permission is hereby granted, free of charge, to any person or organization | // Permission is hereby granted, free of charge, to any person or organization | ||||||
| @@ -86,12 +86,15 @@ public: | |||||||
| 		/// byte order mark, which is the Unicode | 		/// byte order mark, which is the Unicode | ||||||
| 		/// character 0xFEFF. | 		/// character 0xFEFF. | ||||||
| 	 | 	 | ||||||
|  | 	const char* canonicalName() const; | ||||||
|  | 	bool isA(const std::string& encodingName) const; | ||||||
| 	const CharacterMap& characterMap() const; | 	const CharacterMap& characterMap() const; | ||||||
| 	int convert(const unsigned char* bytes) const; | 	int convert(const unsigned char* bytes) const; | ||||||
| 	int convert(int ch, unsigned char* bytes, int length) const; | 	int convert(int ch, unsigned char* bytes, int length) const; | ||||||
| 	 | 	 | ||||||
| private: | private: | ||||||
| 	bool _flipBytes; | 	bool _flipBytes; | ||||||
|  | 	static const char* _names[]; | ||||||
| 	static const CharacterMap _charMap; | 	static const CharacterMap _charMap; | ||||||
| }; | }; | ||||||
|  |  | ||||||
|   | |||||||
| @@ -1,7 +1,7 @@ | |||||||
| // | // | ||||||
| // UTF8Encoding.h | // UTF8Encoding.h | ||||||
| // | // | ||||||
| // $Id: //poco/Main/Foundation/include/Poco/UTF8Encoding.h#2 $ | // $Id: //poco/Main/Foundation/include/Poco/UTF8Encoding.h#3 $ | ||||||
| // | // | ||||||
| // Library: Foundation | // Library: Foundation | ||||||
| // Package: Text | // Package: Text | ||||||
| @@ -9,7 +9,7 @@ | |||||||
| // | // | ||||||
| // Definition of the UTF8Encoding class. | // Definition of the UTF8Encoding class. | ||||||
| // | // | ||||||
| // Copyright (c) 2004-2006, Applied Informatics Software Engineering GmbH. | // Copyright (c) 2004-2007, Applied Informatics Software Engineering GmbH. | ||||||
| // and Contributors. | // and Contributors. | ||||||
| // | // | ||||||
| // Permission is hereby granted, free of charge, to any person or organization | // Permission is hereby granted, free of charge, to any person or organization | ||||||
| @@ -53,11 +53,14 @@ class Foundation_API UTF8Encoding: public TextEncoding | |||||||
| public: | public: | ||||||
| 	UTF8Encoding(); | 	UTF8Encoding(); | ||||||
| 	~UTF8Encoding(); | 	~UTF8Encoding(); | ||||||
|  | 	const char* canonicalName() const; | ||||||
|  | 	bool isA(const std::string& encodingName) const; | ||||||
| 	const CharacterMap& characterMap() const; | 	const CharacterMap& characterMap() const; | ||||||
| 	int convert(const unsigned char* bytes) const; | 	int convert(const unsigned char* bytes) const; | ||||||
| 	int convert(int ch, unsigned char* bytes, int length) const; | 	int convert(int ch, unsigned char* bytes, int length) const; | ||||||
| 	 | 	 | ||||||
| private: | private: | ||||||
|  | 	static const char* _names[]; | ||||||
| 	static const CharacterMap _charMap; | 	static const CharacterMap _charMap; | ||||||
| }; | }; | ||||||
|  |  | ||||||
|   | |||||||
| @@ -1,7 +1,7 @@ | |||||||
| // | // | ||||||
| // Windows1252Encoding.h | // Windows1252Encoding.h | ||||||
| // | // | ||||||
| // $Id: //poco/Main/Foundation/include/Poco/Windows1252Encoding.h#2 $ | // $Id: //poco/Main/Foundation/include/Poco/Windows1252Encoding.h#3 $ | ||||||
| // | // | ||||||
| // Library: Foundation | // Library: Foundation | ||||||
| // Package: Text | // Package: Text | ||||||
| @@ -9,7 +9,7 @@ | |||||||
| // | // | ||||||
| // Definition of the Windows1252Encoding class. | // Definition of the Windows1252Encoding class. | ||||||
| // | // | ||||||
| // Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. | // Copyright (c) 2005-2007, Applied Informatics Software Engineering GmbH. | ||||||
| // and Contributors. | // and Contributors. | ||||||
| // | // | ||||||
| // Permission is hereby granted, free of charge, to any person or organization | // Permission is hereby granted, free of charge, to any person or organization | ||||||
| @@ -53,11 +53,14 @@ class Foundation_API Windows1252Encoding: public TextEncoding | |||||||
| public: | public: | ||||||
| 	Windows1252Encoding(); | 	Windows1252Encoding(); | ||||||
| 	~Windows1252Encoding(); | 	~Windows1252Encoding(); | ||||||
|  | 	const char* canonicalName() const; | ||||||
|  | 	bool isA(const std::string& encodingName) const; | ||||||
| 	const CharacterMap& characterMap() const; | 	const CharacterMap& characterMap() const; | ||||||
| 	int convert(const unsigned char* bytes) const; | 	int convert(const unsigned char* bytes) const; | ||||||
| 	int convert(int ch, unsigned char* bytes, int length) const; | 	int convert(int ch, unsigned char* bytes, int length) const; | ||||||
| 	 | 	 | ||||||
| private: | private: | ||||||
|  | 	static const char* _names[]; | ||||||
| 	static const CharacterMap _charMap; | 	static const CharacterMap _charMap; | ||||||
| }; | }; | ||||||
|  |  | ||||||
|   | |||||||
| @@ -1,13 +1,13 @@ | |||||||
| // | // | ||||||
| // ASCIIEncoding.cpp | // ASCIIEncoding.cpp | ||||||
| // | // | ||||||
| // $Id: //poco/Main/Foundation/src/ASCIIEncoding.cpp#11 $ | // $Id: //poco/Main/Foundation/src/ASCIIEncoding.cpp#12 $ | ||||||
| // | // | ||||||
| // Library: Foundation | // Library: Foundation | ||||||
| // Package: Text | // Package: Text | ||||||
| // Module:  ASCIIEncoding | // Module:  ASCIIEncoding | ||||||
| // | // | ||||||
| // Copyright (c) 2004-2006, Applied Informatics Software Engineering GmbH. | // Copyright (c) 2004-2007, Applied Informatics Software Engineering GmbH. | ||||||
| // and Contributors. | // and Contributors. | ||||||
| // | // | ||||||
| // Permission is hereby granted, free of charge, to any person or organization | // Permission is hereby granted, free of charge, to any person or organization | ||||||
| @@ -35,11 +35,19 @@ | |||||||
|  |  | ||||||
|  |  | ||||||
| #include "Poco/ASCIIEncoding.h" | #include "Poco/ASCIIEncoding.h" | ||||||
|  | #include "Poco/String.h" | ||||||
|  |  | ||||||
|  |  | ||||||
| namespace Poco { | namespace Poco { | ||||||
|  |  | ||||||
|  |  | ||||||
|  | const char* ASCIIEncoding::_names[] = | ||||||
|  | { | ||||||
|  | 	"ASCII", | ||||||
|  | 	NULL | ||||||
|  | }; | ||||||
|  |  | ||||||
|  |  | ||||||
| const TextEncoding::CharacterMap ASCIIEncoding::_charMap =  | const TextEncoding::CharacterMap ASCIIEncoding::_charMap =  | ||||||
| { | { | ||||||
| 	/* 00 */	0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,  | 	/* 00 */	0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,  | ||||||
| @@ -71,6 +79,23 @@ ASCIIEncoding::~ASCIIEncoding() | |||||||
| } | } | ||||||
|  |  | ||||||
|  |  | ||||||
|  | const char* ASCIIEncoding::canonicalName() const | ||||||
|  | { | ||||||
|  | 	return _names[0]; | ||||||
|  | } | ||||||
|  |  | ||||||
|  |  | ||||||
|  | bool ASCIIEncoding::isA(const std::string& encodingName) const | ||||||
|  | { | ||||||
|  | 	for (const char** name = _names; *name; ++name) | ||||||
|  | 	{ | ||||||
|  | 		if (Poco::icompare(encodingName, *name) == 0) | ||||||
|  | 			return true; | ||||||
|  | 	} | ||||||
|  | 	return false; | ||||||
|  | } | ||||||
|  |  | ||||||
|  |  | ||||||
| const TextEncoding::CharacterMap& ASCIIEncoding::characterMap() const | const TextEncoding::CharacterMap& ASCIIEncoding::characterMap() const | ||||||
| { | { | ||||||
| 	return _charMap; | 	return _charMap; | ||||||
|   | |||||||
							
								
								
									
										101
									
								
								Foundation/src/Condition.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										101
									
								
								Foundation/src/Condition.cpp
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,101 @@ | |||||||
|  | // | ||||||
|  | // Condition.cpp | ||||||
|  | // | ||||||
|  | // $Id: //poco/Main/Foundation/src/Condition.cpp#1 $ | ||||||
|  | // | ||||||
|  | // Library: Foundation | ||||||
|  | // Package: Threading | ||||||
|  | // Module:  Condition | ||||||
|  | // | ||||||
|  | // Copyright (c) 2007, Applied Informatics Software Engineering GmbH. | ||||||
|  | // and Contributors. | ||||||
|  | // | ||||||
|  | // Permission is hereby granted, free of charge, to any person or organization | ||||||
|  | // obtaining a copy of the software and accompanying documentation covered by | ||||||
|  | // this license (the "Software") to use, reproduce, display, distribute, | ||||||
|  | // execute, and transmit the Software, and to prepare derivative works of the | ||||||
|  | // Software, and to permit third-parties to whom the Software is furnished to | ||||||
|  | // do so, all subject to the following: | ||||||
|  | //  | ||||||
|  | // The copyright notices in the Software and this entire statement, including | ||||||
|  | // the above license grant, this restriction and the following disclaimer, | ||||||
|  | // must be included in all copies of the Software, in whole or in part, and | ||||||
|  | // all derivative works of the Software, unless such copies or derivative | ||||||
|  | // works are solely in the form of machine-executable object code generated by | ||||||
|  | // a source language processor. | ||||||
|  | //  | ||||||
|  | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||||||
|  | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||||||
|  | // FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT | ||||||
|  | // SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE | ||||||
|  | // FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE, | ||||||
|  | // ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER | ||||||
|  | // DEALINGS IN THE SOFTWARE. | ||||||
|  | // | ||||||
|  |  | ||||||
|  |  | ||||||
|  | #include "Poco/Condition.h" | ||||||
|  |  | ||||||
|  |  | ||||||
|  | namespace Poco { | ||||||
|  |  | ||||||
|  |  | ||||||
|  | Condition::Condition() | ||||||
|  | { | ||||||
|  | } | ||||||
|  |  | ||||||
|  | Condition::~Condition() | ||||||
|  | { | ||||||
|  | } | ||||||
|  |  | ||||||
|  |  | ||||||
|  | void Condition::signal() | ||||||
|  | { | ||||||
|  | 	FastMutex::ScopedLock lock(_mutex); | ||||||
|  | 	 | ||||||
|  | 	if (!_waitQueue.empty()) | ||||||
|  | 	{ | ||||||
|  | 		_waitQueue.front()->set(); | ||||||
|  | 		dequeue(); | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  |  | ||||||
|  |  | ||||||
|  | void Condition::broadcast() | ||||||
|  | { | ||||||
|  | 	FastMutex::ScopedLock lock(_mutex); | ||||||
|  | 	 | ||||||
|  | 	for (WaitQueue::iterator it = _waitQueue.begin(); it != _waitQueue.end(); ++it) | ||||||
|  | 	{ | ||||||
|  | 		(*it)->set(); | ||||||
|  | 	} | ||||||
|  | 	_waitQueue.clear(); | ||||||
|  | } | ||||||
|  |  | ||||||
|  |  | ||||||
|  | void Condition::enqueue(Event& event) | ||||||
|  | { | ||||||
|  | 	_waitQueue.push_back(&event); | ||||||
|  | } | ||||||
|  |  | ||||||
|  |  | ||||||
|  | void Condition::dequeue() | ||||||
|  | { | ||||||
|  | 	_waitQueue.pop_front(); | ||||||
|  | } | ||||||
|  |  | ||||||
|  |  | ||||||
|  | void Condition::dequeue(Event& event) | ||||||
|  | { | ||||||
|  | 	for (WaitQueue::iterator it = _waitQueue.begin(); it != _waitQueue.end(); ++it) | ||||||
|  | 	{ | ||||||
|  | 		if (*it == &event) | ||||||
|  | 		{ | ||||||
|  | 			_waitQueue.erase(it); | ||||||
|  | 			break; | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  |  | ||||||
|  |  | ||||||
|  | } // namespace Poco | ||||||
| @@ -1,7 +1,7 @@ | |||||||
| // | // | ||||||
| // File.cpp | // File.cpp | ||||||
| // | // | ||||||
| // $Id: //poco/Main/Foundation/src/File.cpp#17 $ | // $Id: //poco/Main/Foundation/src/File.cpp#19 $ | ||||||
| // | // | ||||||
| // Library: Foundation | // Library: Foundation | ||||||
| // Package: Filesystem | // Package: Filesystem | ||||||
| @@ -211,24 +211,40 @@ void File::setExecutable(bool flag) | |||||||
| void File::copyTo(const std::string& path) const | void File::copyTo(const std::string& path) const | ||||||
| { | { | ||||||
| 	Path src(getPathImpl()); | 	Path src(getPathImpl()); | ||||||
| 	File srcFile(src); |  | ||||||
| 	if (srcFile.isDirectory())  |  | ||||||
| 		throw OpenFileException("cannot copy directory", src.toString()); |  | ||||||
|  |  | ||||||
| 	Path dest(path); | 	Path dest(path); | ||||||
| 	if (dest.isDirectory()) | 	File destFile(path); | ||||||
|  | 	if (destFile.exists() && destFile.isDirectory() || dest.isDirectory()) | ||||||
| 	{ | 	{ | ||||||
| 		dest.makeDirectory(); | 		dest.makeDirectory(); | ||||||
| 		dest.setFileName(src.getFileName()); | 		dest.setFileName(src.getFileName()); | ||||||
| 	} | 	} | ||||||
| 	copyToImpl(dest.toString()); | 	if (isDirectory()) | ||||||
|  | 		copyDirectory(dest.toString()); | ||||||
|  | 	else | ||||||
|  | 		copyToImpl(dest.toString()); | ||||||
|  | } | ||||||
|  |  | ||||||
|  |  | ||||||
|  | void File::copyDirectory(const std::string& path) const | ||||||
|  | { | ||||||
|  | 	File target(path); | ||||||
|  | 	target.createDirectories(); | ||||||
|  |  | ||||||
|  | 	Path src(getPathImpl()); | ||||||
|  | 	src.makeFile(); | ||||||
|  | 	DirectoryIterator it(src); | ||||||
|  | 	DirectoryIterator end; | ||||||
|  | 	for (; it != end; ++it) | ||||||
|  | 	{ | ||||||
|  | 		it->copyTo(path); | ||||||
|  | 	} | ||||||
| } | } | ||||||
|  |  | ||||||
|  |  | ||||||
| void File::moveTo(const std::string& path) | void File::moveTo(const std::string& path) | ||||||
| { | { | ||||||
| 	copyToImpl(path); | 	copyTo(path); | ||||||
| 	removeImpl(); | 	remove(true); | ||||||
| 	setPathImpl(path); | 	setPathImpl(path); | ||||||
| } | } | ||||||
|  |  | ||||||
|   | |||||||
| @@ -1,7 +1,7 @@ | |||||||
| // | // | ||||||
| // File_WIN32.cpp | // File_WIN32.cpp | ||||||
| // | // | ||||||
| // $Id: //poco/Main/Foundation/src/File_WIN32.cpp#16 $ | // $Id: //poco/Main/Foundation/src/File_WIN32.cpp#17 $ | ||||||
| // | // | ||||||
| // Library: Foundation | // Library: Foundation | ||||||
| // Package: Filesystem | // Package: Filesystem | ||||||
| @@ -319,7 +319,7 @@ bool FileImpl::createFileImpl() | |||||||
| 	poco_assert (!_path.empty()); | 	poco_assert (!_path.empty()); | ||||||
|  |  | ||||||
| 	HANDLE hFile = CreateFile(_path.c_str(), GENERIC_WRITE, 0, 0, CREATE_NEW, 0, 0); | 	HANDLE hFile = CreateFile(_path.c_str(), GENERIC_WRITE, 0, 0, CREATE_NEW, 0, 0); | ||||||
| 	if (hFile) | 	if (hFile != INVALID_HANDLE_VALUE) | ||||||
| 	{ | 	{ | ||||||
| 		CloseHandle(hFile); | 		CloseHandle(hFile); | ||||||
| 		return true; | 		return true; | ||||||
|   | |||||||
| @@ -1,7 +1,7 @@ | |||||||
| // | // | ||||||
| // File_WIN32U.cpp | // File_WIN32U.cpp | ||||||
| // | // | ||||||
| // $Id: //poco/Main/Foundation/src/File_WIN32U.cpp#10 $ | // $Id: //poco/Main/Foundation/src/File_WIN32U.cpp#11 $ | ||||||
| // | // | ||||||
| // Library: Foundation | // Library: Foundation | ||||||
| // Package: Filesystem | // Package: Filesystem | ||||||
| @@ -327,7 +327,7 @@ bool FileImpl::createFileImpl() | |||||||
| 	poco_assert (!_path.empty()); | 	poco_assert (!_path.empty()); | ||||||
|  |  | ||||||
| 	HANDLE hFile = CreateFileW(_upath.c_str(), GENERIC_WRITE, 0, 0, CREATE_NEW, 0, 0); | 	HANDLE hFile = CreateFileW(_upath.c_str(), GENERIC_WRITE, 0, 0, CREATE_NEW, 0, 0); | ||||||
| 	if (hFile) | 	if (hFile != INVALID_HANDLE_VALUE) | ||||||
| 	{ | 	{ | ||||||
| 		CloseHandle(hFile); | 		CloseHandle(hFile); | ||||||
| 		return true; | 		return true; | ||||||
|   | |||||||
| @@ -1,13 +1,13 @@ | |||||||
| // | // | ||||||
| // Latin1Encoding.cpp | // Latin1Encoding.cpp | ||||||
| // | // | ||||||
| // $Id: //poco/Main/Foundation/src/Latin1Encoding.cpp#11 $ | // $Id: //poco/Main/Foundation/src/Latin1Encoding.cpp#12 $ | ||||||
| // | // | ||||||
| // Library: Foundation | // Library: Foundation | ||||||
| // Package: Text | // Package: Text | ||||||
| // Module:  Latin1Encoding | // Module:  Latin1Encoding | ||||||
| // | // | ||||||
| // Copyright (c) 2004-2006, Applied Informatics Software Engineering GmbH. | // Copyright (c) 2004-2007, Applied Informatics Software Engineering GmbH. | ||||||
| // and Contributors. | // and Contributors. | ||||||
| // | // | ||||||
| // Permission is hereby granted, free of charge, to any person or organization | // Permission is hereby granted, free of charge, to any person or organization | ||||||
| @@ -35,11 +35,21 @@ | |||||||
|  |  | ||||||
|  |  | ||||||
| #include "Poco/Latin1Encoding.h" | #include "Poco/Latin1Encoding.h" | ||||||
|  | #include "Poco/String.h" | ||||||
|  |  | ||||||
|  |  | ||||||
| namespace Poco { | namespace Poco { | ||||||
|  |  | ||||||
|  |  | ||||||
|  | const char* Latin1Encoding::_names[] = | ||||||
|  | { | ||||||
|  | 	"ISO-8859-1", | ||||||
|  | 	"Latin1", | ||||||
|  | 	"Latin-1", | ||||||
|  | 	NULL | ||||||
|  | }; | ||||||
|  |  | ||||||
|  |  | ||||||
| const TextEncoding::CharacterMap Latin1Encoding::_charMap =  | const TextEncoding::CharacterMap Latin1Encoding::_charMap =  | ||||||
| { | { | ||||||
| 	/* 00 */	0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,  | 	/* 00 */	0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,  | ||||||
| @@ -71,6 +81,23 @@ Latin1Encoding::~Latin1Encoding() | |||||||
| } | } | ||||||
|  |  | ||||||
|  |  | ||||||
|  | const char* Latin1Encoding::canonicalName() const | ||||||
|  | { | ||||||
|  | 	return _names[0]; | ||||||
|  | } | ||||||
|  |  | ||||||
|  |  | ||||||
|  | bool Latin1Encoding::isA(const std::string& encodingName) const | ||||||
|  | { | ||||||
|  | 	for (const char** name = _names; *name; ++name) | ||||||
|  | 	{ | ||||||
|  | 		if (Poco::icompare(encodingName, *name) == 0) | ||||||
|  | 			return true; | ||||||
|  | 	} | ||||||
|  | 	return false; | ||||||
|  | } | ||||||
|  |  | ||||||
|  |  | ||||||
| const TextEncoding::CharacterMap& Latin1Encoding::characterMap() const | const TextEncoding::CharacterMap& Latin1Encoding::characterMap() const | ||||||
| { | { | ||||||
| 	return _charMap; | 	return _charMap; | ||||||
|   | |||||||
| @@ -1,13 +1,13 @@ | |||||||
| // | // | ||||||
| // Latin9Encoding.cpp | // Latin9Encoding.cpp | ||||||
| // | // | ||||||
| // $Id: //poco/Main/Foundation/src/Latin9Encoding.cpp#11 $ | // $Id: //poco/Main/Foundation/src/Latin9Encoding.cpp#12 $ | ||||||
| // | // | ||||||
| // Library: Foundation | // Library: Foundation | ||||||
| // Package: Text | // Package: Text | ||||||
| // Module:  Latin9Encoding | // Module:  Latin9Encoding | ||||||
| // | // | ||||||
| // Copyright (c) 2004-2006, Applied Informatics Software Engineering GmbH. | // Copyright (c) 2004-2007, Applied Informatics Software Engineering GmbH. | ||||||
| // and Contributors. | // and Contributors. | ||||||
| // | // | ||||||
| // Permission is hereby granted, free of charge, to any person or organization | // Permission is hereby granted, free of charge, to any person or organization | ||||||
| @@ -35,11 +35,21 @@ | |||||||
|  |  | ||||||
|  |  | ||||||
| #include "Poco/Latin9Encoding.h" | #include "Poco/Latin9Encoding.h" | ||||||
|  | #include "Poco/String.h" | ||||||
|  |  | ||||||
|  |  | ||||||
| namespace Poco { | namespace Poco { | ||||||
|  |  | ||||||
|  |  | ||||||
|  | const char* Latin9Encoding::_names[] = | ||||||
|  | { | ||||||
|  | 	"ISO-8859-15", | ||||||
|  | 	"Latin9", | ||||||
|  | 	"Latin-9", | ||||||
|  | 	NULL | ||||||
|  | }; | ||||||
|  |  | ||||||
|  |  | ||||||
| const TextEncoding::CharacterMap Latin9Encoding::_charMap =  | const TextEncoding::CharacterMap Latin9Encoding::_charMap =  | ||||||
| { | { | ||||||
| 	/* 00 */	0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, 0x0008, 0x0009, 0x000a, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f,  | 	/* 00 */	0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, 0x0008, 0x0009, 0x000a, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f,  | ||||||
| @@ -71,6 +81,23 @@ Latin9Encoding::~Latin9Encoding() | |||||||
| } | } | ||||||
|  |  | ||||||
|  |  | ||||||
|  | const char* Latin9Encoding::canonicalName() const | ||||||
|  | { | ||||||
|  | 	return _names[0]; | ||||||
|  | } | ||||||
|  |  | ||||||
|  |  | ||||||
|  | bool Latin9Encoding::isA(const std::string& encodingName) const | ||||||
|  | { | ||||||
|  | 	for (const char** name = _names; *name; ++name) | ||||||
|  | 	{ | ||||||
|  | 		if (Poco::icompare(encodingName, *name) == 0) | ||||||
|  | 			return true; | ||||||
|  | 	} | ||||||
|  | 	return false; | ||||||
|  | } | ||||||
|  |  | ||||||
|  |  | ||||||
| const TextEncoding::CharacterMap& Latin9Encoding::characterMap() const | const TextEncoding::CharacterMap& Latin9Encoding::characterMap() const | ||||||
| { | { | ||||||
| 	return _charMap; | 	return _charMap; | ||||||
|   | |||||||
| @@ -1,7 +1,7 @@ | |||||||
| // | // | ||||||
| // Path.cpp | // Path.cpp | ||||||
| // | // | ||||||
| // $Id: //poco/Main/Foundation/src/Path.cpp#20 $ | // $Id: //poco/Main/Foundation/src/Path.cpp#21 $ | ||||||
| // | // | ||||||
| // Library: Foundation | // Library: Foundation | ||||||
| // Package: Filesystem | // Package: Filesystem | ||||||
| @@ -119,6 +119,19 @@ Path::Path(const Path& parent, const std::string& fileName): | |||||||
| } | } | ||||||
|  |  | ||||||
|  |  | ||||||
|  | Path::Path(const Path& parent, const char* fileName): | ||||||
|  | 	_node(parent._node),  | ||||||
|  | 	_device(parent._device), | ||||||
|  | 	_name(parent._name), | ||||||
|  | 	_version(parent._version), | ||||||
|  | 	_dirs(parent._dirs), | ||||||
|  | 	_absolute(parent._absolute) | ||||||
|  | {	 | ||||||
|  | 	makeDirectory(); | ||||||
|  | 	_name = fileName; | ||||||
|  | } | ||||||
|  |  | ||||||
|  |  | ||||||
| Path::Path(const Path& parent, const Path& relative): | Path::Path(const Path& parent, const Path& relative): | ||||||
| 	_node(parent._node),  | 	_node(parent._node),  | ||||||
| 	_device(parent._device), | 	_device(parent._device), | ||||||
|   | |||||||
| @@ -1,7 +1,7 @@ | |||||||
| // | // | ||||||
| // SharedMemory.cpp | // SharedMemory.cpp | ||||||
| // | // | ||||||
| // $Id: //poco/Main/Foundation/src/SharedMemory.cpp#4 $ | // $Id: //poco/Main/Foundation/src/SharedMemory.cpp#5 $ | ||||||
| // | // | ||||||
| // Library: Poco | // Library: Poco | ||||||
| // Package: Processes | // Package: Processes | ||||||
| @@ -34,6 +34,12 @@ | |||||||
| // | // | ||||||
|  |  | ||||||
|  |  | ||||||
|  | #if POCO_OS == POCO_OS_SOLARIS | ||||||
|  | #undef _XOPEN_SOURCE | ||||||
|  | #define _XOPEN_SOURCE 500 | ||||||
|  | #endif | ||||||
|  |  | ||||||
|  |  | ||||||
| #include "Poco/SharedMemory.h" | #include "Poco/SharedMemory.h" | ||||||
| #include "Poco/Exception.h" | #include "Poco/Exception.h" | ||||||
| #if defined(POCO_OS_FAMILY_WINDOWS) | #if defined(POCO_OS_FAMILY_WINDOWS) | ||||||
|   | |||||||
| @@ -1,7 +1,7 @@ | |||||||
| // | // | ||||||
| // TextEncoding.cpp | // TextEncoding.cpp | ||||||
| // | // | ||||||
| // $Id: //poco/Main/Foundation/src/TextEncoding.cpp#10 $ | // $Id: //poco/Main/Foundation/src/TextEncoding.cpp#13 $ | ||||||
| // | // | ||||||
| // Library: Foundation | // Library: Foundation | ||||||
| // Package: Text | // Package: Text | ||||||
| @@ -35,16 +35,114 @@ | |||||||
|  |  | ||||||
|  |  | ||||||
| #include "Poco/TextEncoding.h" | #include "Poco/TextEncoding.h" | ||||||
|  | #include "Poco/Exception.h" | ||||||
|  | #include "Poco/String.h" | ||||||
|  | #include "Poco/ASCIIEncoding.h" | ||||||
|  | #include "Poco/Latin1Encoding.h" | ||||||
|  | #include "Poco/Latin9Encoding.h" | ||||||
|  | #include "Poco/UTF16Encoding.h" | ||||||
|  | #include "Poco/UTF8Encoding.h" | ||||||
|  | #include "Poco/Windows1252Encoding.h" | ||||||
|  | #include "Poco/RWLock.h" | ||||||
|  | #include "Poco/SingletonHolder.h" | ||||||
|  | #include <map> | ||||||
|  |  | ||||||
|  |  | ||||||
| namespace Poco { | namespace Poco { | ||||||
|  |  | ||||||
|  |  | ||||||
|  | // | ||||||
|  | // TextEncodingManager | ||||||
|  | // | ||||||
|  |  | ||||||
|  |  | ||||||
|  | class TextEncodingManager | ||||||
|  | { | ||||||
|  | public: | ||||||
|  | 	TextEncodingManager() | ||||||
|  | 	{ | ||||||
|  | 		TextEncoding::Ptr pUtf8Encoding(new UTF8Encoding); | ||||||
|  | 		add(pUtf8Encoding, TextEncoding::GLOBAL);  | ||||||
|  |  | ||||||
|  | 		add(new ASCIIEncoding); | ||||||
|  | 		add(new Latin1Encoding); | ||||||
|  | 		add(new Latin9Encoding); | ||||||
|  | 		add(pUtf8Encoding); | ||||||
|  | 		add(new UTF16Encoding); | ||||||
|  | 		add(new Windows1252Encoding); | ||||||
|  | 	} | ||||||
|  | 	 | ||||||
|  | 	~TextEncodingManager() | ||||||
|  | 	{ | ||||||
|  | 	} | ||||||
|  | 	 | ||||||
|  | 	void add(TextEncoding::Ptr pEncoding) | ||||||
|  | 	{ | ||||||
|  | 		add(pEncoding, pEncoding->canonicalName()); | ||||||
|  | 	} | ||||||
|  | 	 | ||||||
|  | 	void add(TextEncoding::Ptr pEncoding, const std::string& name) | ||||||
|  | 	{ | ||||||
|  | 		RWLock::ScopedLock lock(_lock, true); | ||||||
|  | 	 | ||||||
|  | 		_encodings[name] = pEncoding; | ||||||
|  | 	} | ||||||
|  | 	 | ||||||
|  | 	void remove(const std::string& name) | ||||||
|  | 	{ | ||||||
|  | 		RWLock::ScopedLock lock(_lock, true); | ||||||
|  | 	 | ||||||
|  | 		_encodings.erase(name); | ||||||
|  | 	} | ||||||
|  | 	 | ||||||
|  | 	TextEncoding::Ptr find(const std::string& name) const | ||||||
|  | 	{ | ||||||
|  | 		RWLock::ScopedLock lock(_lock); | ||||||
|  | 		 | ||||||
|  | 		EncodingMap::const_iterator it = _encodings.find(name); | ||||||
|  | 		if (it != _encodings.end()) | ||||||
|  | 			return it->second; | ||||||
|  | 		 | ||||||
|  | 		for (it = _encodings.begin(); it != _encodings.end(); ++it) | ||||||
|  | 		{ | ||||||
|  | 			if (it->second->isA(name)) | ||||||
|  | 				return it->second; | ||||||
|  | 		} | ||||||
|  | 		return TextEncoding::Ptr(); | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | private: | ||||||
|  | 	TextEncodingManager(const TextEncodingManager&); | ||||||
|  | 	TextEncodingManager& operator = (const TextEncodingManager&); | ||||||
|  | 	 | ||||||
|  | 	struct ILT | ||||||
|  | 	{ | ||||||
|  | 		bool operator() (const std::string& s1, const std::string& s2) const | ||||||
|  | 		{ | ||||||
|  | 			return Poco::icompare(s1, s2) < 0; | ||||||
|  | 		} | ||||||
|  | 	}; | ||||||
|  | 	 | ||||||
|  | 	typedef std::map<std::string, TextEncoding::Ptr, ILT> EncodingMap; | ||||||
|  | 	 | ||||||
|  | 	EncodingMap    _encodings; | ||||||
|  | 	mutable RWLock _lock; | ||||||
|  | }; | ||||||
|  |  | ||||||
|  |  | ||||||
|  | // | ||||||
|  | // TextEncoding | ||||||
|  | // | ||||||
|  |  | ||||||
|  |  | ||||||
|  | const std::string TextEncoding::GLOBAL; | ||||||
|  |  | ||||||
|  |  | ||||||
| TextEncoding::~TextEncoding() | TextEncoding::~TextEncoding() | ||||||
| { | { | ||||||
| } | } | ||||||
|  |  | ||||||
| 	 |  | ||||||
| int TextEncoding::convert(const unsigned char* bytes) const | int TextEncoding::convert(const unsigned char* bytes) const | ||||||
| { | { | ||||||
| 	return (int) *bytes; | 	return (int) *bytes; | ||||||
| @@ -57,5 +155,59 @@ int TextEncoding::convert(int ch, unsigned char* bytes, int length) const | |||||||
| } | } | ||||||
|  |  | ||||||
|  |  | ||||||
| } // namespace Poco | TextEncoding& TextEncoding::byName(const std::string& encodingName) | ||||||
|  | { | ||||||
|  | 	TextEncoding* pEncoding = manager().find(encodingName); | ||||||
|  | 	if (pEncoding) | ||||||
|  | 		return *pEncoding; | ||||||
|  | 	else | ||||||
|  | 		throw NotFoundException(encodingName); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | 	 | ||||||
|  | TextEncoding::Ptr TextEncoding::find(const std::string& encodingName) | ||||||
|  | { | ||||||
|  | 	return manager().find(encodingName); | ||||||
|  | } | ||||||
|  |  | ||||||
|  |  | ||||||
|  | void TextEncoding::add(TextEncoding::Ptr pEncoding) | ||||||
|  | { | ||||||
|  | 	manager().add(pEncoding, pEncoding->canonicalName()); | ||||||
|  | } | ||||||
|  |  | ||||||
|  |  | ||||||
|  | void TextEncoding::add(TextEncoding::Ptr pEncoding, const std::string& name) | ||||||
|  | { | ||||||
|  | 	manager().add(pEncoding, name); | ||||||
|  | } | ||||||
|  |  | ||||||
|  |  | ||||||
|  | void TextEncoding::remove(const std::string& encodingName) | ||||||
|  | { | ||||||
|  | 	manager().remove(encodingName); | ||||||
|  | } | ||||||
|  |  | ||||||
|  |  | ||||||
|  | TextEncoding::Ptr TextEncoding::global(TextEncoding::Ptr encoding) | ||||||
|  | { | ||||||
|  | 	TextEncoding::Ptr prev = find(GLOBAL); | ||||||
|  | 	add(encoding, GLOBAL); | ||||||
|  | 	return prev; | ||||||
|  | } | ||||||
|  |  | ||||||
|  |  | ||||||
|  | TextEncoding& TextEncoding::global() | ||||||
|  | { | ||||||
|  | 	return byName(GLOBAL); | ||||||
|  | } | ||||||
|  |  | ||||||
|  |  | ||||||
|  | TextEncodingManager& TextEncoding::manager() | ||||||
|  | { | ||||||
|  | 	static SingletonHolder<TextEncodingManager> sh; | ||||||
|  | 	return *sh.get(); | ||||||
|  | } | ||||||
|  |  | ||||||
|  |  | ||||||
|  | } // namespace Poco | ||||||
|   | |||||||
| @@ -1,7 +1,7 @@ | |||||||
| // | // | ||||||
| // Thread.cpp | // Thread.cpp | ||||||
| // | // | ||||||
| // $Id: //poco/Main/Foundation/src/Thread.cpp#12 $ | // $Id: //poco/Main/Foundation/src/Thread.cpp#13 $ | ||||||
| // | // | ||||||
| // Library: Foundation | // Library: Foundation | ||||||
| // Package: Threading | // Package: Threading | ||||||
| @@ -97,6 +97,19 @@ void Thread::join() | |||||||
| } | } | ||||||
|  |  | ||||||
|  |  | ||||||
|  | void Thread::join(long milliseconds) | ||||||
|  | { | ||||||
|  | 	if (!joinImpl(milliseconds)) | ||||||
|  | 		throw TimeoutException(); | ||||||
|  | } | ||||||
|  |  | ||||||
|  |  | ||||||
|  | bool Thread::tryJoin(long milliseconds) | ||||||
|  | { | ||||||
|  | 	return joinImpl(milliseconds); | ||||||
|  | } | ||||||
|  |  | ||||||
|  |  | ||||||
| ThreadLocalStorage& Thread::tls() | ThreadLocalStorage& Thread::tls() | ||||||
| { | { | ||||||
| 	if (!_pTLS) | 	if (!_pTLS) | ||||||
|   | |||||||
| @@ -1,13 +1,13 @@ | |||||||
| // | // | ||||||
| // Thread_POSIX.cpp | // Thread_POSIX.cpp | ||||||
| // | // | ||||||
| // $Id: //poco/Main/Foundation/src/Thread_POSIX.cpp#13 $ | // $Id: //poco/Main/Foundation/src/Thread_POSIX.cpp#15 $ | ||||||
| // | // | ||||||
| // Library: Foundation | // Library: Foundation | ||||||
| // Package: Threading | // Package: Threading | ||||||
| // Module:  Thread | // Module:  Thread | ||||||
| // | // | ||||||
| // Copyright (c) 2004-2006, Applied Informatics Software Engineering GmbH. | // Copyright (c) 2004-2007, Applied Informatics Software Engineering GmbH. | ||||||
| // and Contributors. | // and Contributors. | ||||||
| // | // | ||||||
| // Permission is hereby granted, free of charge, to any person or organization | // Permission is hereby granted, free of charge, to any person or organization | ||||||
| @@ -73,10 +73,8 @@ pthread_key_t ThreadImpl::_currentKey; | |||||||
| bool ThreadImpl::_haveCurrentKey = false; | bool ThreadImpl::_haveCurrentKey = false; | ||||||
|  |  | ||||||
|  |  | ||||||
| ThreadImpl::ThreadImpl():  | ThreadImpl::ThreadImpl(): | ||||||
| 	_pTarget(0),  | 	_pData(new ThreadData) | ||||||
| 	_thread(0),  |  | ||||||
| 	_prio(PRIO_NORMAL_IMPL) |  | ||||||
| { | { | ||||||
| 	if (!_haveCurrentKey) | 	if (!_haveCurrentKey) | ||||||
| 	{ | 	{ | ||||||
| @@ -89,21 +87,21 @@ ThreadImpl::ThreadImpl(): | |||||||
| 			 | 			 | ||||||
| ThreadImpl::~ThreadImpl() | ThreadImpl::~ThreadImpl() | ||||||
| { | { | ||||||
| 	if (_pTarget) | 	if (_pData->pTarget) | ||||||
| 		pthread_detach(_thread); | 		pthread_detach(_pData->thread); | ||||||
| } | } | ||||||
|  |  | ||||||
|  |  | ||||||
| void ThreadImpl::setPriorityImpl(int prio) | void ThreadImpl::setPriorityImpl(int prio) | ||||||
| { | { | ||||||
| 	if (prio != _prio) | 	if (prio != _pData->prio) | ||||||
| 	{ | 	{ | ||||||
| 		_prio = prio; | 		_pData->prio = prio; | ||||||
| 		if (_pTarget) | 		if (_pData->pTarget) | ||||||
| 		{ | 		{ | ||||||
| 			struct sched_param par; | 			struct sched_param par; | ||||||
| 			par.sched_priority = mapPrio(_prio); | 			par.sched_priority = mapPrio(_pData->prio); | ||||||
| 			if (pthread_setschedparam(_thread, SCHED_OTHER, &par)) | 			if (pthread_setschedparam(_pData->thread, SCHED_OTHER, &par)) | ||||||
| 				throw SystemException("cannot set thread priority"); | 				throw SystemException("cannot set thread priority"); | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
| @@ -112,20 +110,20 @@ void ThreadImpl::setPriorityImpl(int prio) | |||||||
|  |  | ||||||
| void ThreadImpl::startImpl(Runnable& target) | void ThreadImpl::startImpl(Runnable& target) | ||||||
| { | { | ||||||
| 	if (_pTarget) throw SystemException("thread already running"); | 	if (_pData->pTarget) throw SystemException("thread already running"); | ||||||
|  |  | ||||||
| 	_pTarget = ⌖ | 	_pData->pTarget = ⌖ | ||||||
| 	if (pthread_create(&_thread, NULL, entry, this)) | 	if (pthread_create(&_pData->thread, NULL, entry, this)) | ||||||
| 	{ | 	{ | ||||||
| 		_pTarget = 0; | 		_pData->pTarget = 0; | ||||||
| 		throw SystemException("cannot start thread"); | 		throw SystemException("cannot start thread"); | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	if (_prio != PRIO_NORMAL_IMPL) | 	if (_pData->prio != PRIO_NORMAL_IMPL) | ||||||
| 	{ | 	{ | ||||||
| 		struct sched_param par; | 		struct sched_param par; | ||||||
| 		par.sched_priority = mapPrio(_prio); | 		par.sched_priority = mapPrio(_pData->prio); | ||||||
| 		if (pthread_setschedparam(_thread, SCHED_OTHER, &par)) | 		if (pthread_setschedparam(_pData->thread, SCHED_OTHER, &par)) | ||||||
| 			throw SystemException("cannot set thread priority"); | 			throw SystemException("cannot set thread priority"); | ||||||
| 	} | 	} | ||||||
| } | } | ||||||
| @@ -133,24 +131,36 @@ void ThreadImpl::startImpl(Runnable& target) | |||||||
|  |  | ||||||
| void ThreadImpl::joinImpl() | void ThreadImpl::joinImpl() | ||||||
| { | { | ||||||
| 	if (!_pTarget) return; | 	_pData->done.wait(); | ||||||
| 	void* result; | 	void* result; | ||||||
| 	if (pthread_join(_thread, &result)) | 	if (pthread_join(_pData->thread, &result)) | ||||||
| 		throw SystemException("cannot join thread");  | 		throw SystemException("cannot join thread");  | ||||||
| 	_pTarget = 0; | } | ||||||
|  |  | ||||||
|  |  | ||||||
|  | bool ThreadImpl::joinImpl(long milliseconds) | ||||||
|  | { | ||||||
|  | 	if (_pData->done.tryWait(milliseconds)) | ||||||
|  | 	{ | ||||||
|  | 		void* result; | ||||||
|  | 		if (pthread_join(_pData->thread, &result)) | ||||||
|  | 			throw SystemException("cannot join thread"); | ||||||
|  | 		return true; | ||||||
|  | 	} | ||||||
|  | 	else return false; | ||||||
| } | } | ||||||
|  |  | ||||||
|  |  | ||||||
| bool ThreadImpl::isRunningImpl() const | bool ThreadImpl::isRunningImpl() const | ||||||
| { | { | ||||||
| 	return _pTarget != 0; | 	return _pData->pTarget != 0; | ||||||
| } | } | ||||||
|  |  | ||||||
|  |  | ||||||
| ThreadImpl* ThreadImpl::currentImpl() | ThreadImpl* ThreadImpl::currentImpl() | ||||||
| { | { | ||||||
| 	if (_haveCurrentKey) | 	if (_haveCurrentKey) | ||||||
| 		return (ThreadImpl*) pthread_getspecific(_currentKey); | 		return reinterpret_cast<ThreadImpl*>(pthread_getspecific(_currentKey)); | ||||||
| 	else | 	else | ||||||
| 		return 0; | 		return 0; | ||||||
| } | } | ||||||
| @@ -169,9 +179,11 @@ void* ThreadImpl::entry(void* pThread) | |||||||
| 	pthread_sigmask(SIG_BLOCK, &sset, 0); | 	pthread_sigmask(SIG_BLOCK, &sset, 0); | ||||||
| #endif | #endif | ||||||
|  |  | ||||||
|  | 	ThreadImpl* pThreadImpl = reinterpret_cast<ThreadImpl*>(pThread); | ||||||
|  | 	AutoPtr<ThreadData> pData = pThreadImpl->_pData; | ||||||
| 	try | 	try | ||||||
| 	{ | 	{ | ||||||
| 		reinterpret_cast<ThreadImpl*>(pThread)->_pTarget->run(); | 		pData->pTarget->run(); | ||||||
| 	} | 	} | ||||||
| 	catch (Exception& exc) | 	catch (Exception& exc) | ||||||
| 	{ | 	{ | ||||||
| @@ -185,6 +197,8 @@ void* ThreadImpl::entry(void* pThread) | |||||||
| 	{ | 	{ | ||||||
| 		ErrorHandler::handle(); | 		ErrorHandler::handle(); | ||||||
| 	} | 	} | ||||||
|  | 	pData->pTarget = 0; | ||||||
|  | 	pData->done.set(); | ||||||
| 	return 0; | 	return 0; | ||||||
| } | } | ||||||
|  |  | ||||||
|   | |||||||
| @@ -1,7 +1,7 @@ | |||||||
| // | // | ||||||
| // Thread_WIN32.h | // Thread_WIN32.h | ||||||
| // | // | ||||||
| // $Id: //poco/Main/Foundation/src/Thread_WIN32.cpp#12 $ | // $Id: //poco/Main/Foundation/src/Thread_WIN32.cpp#13 $ | ||||||
| // | // | ||||||
| // Library: Foundation | // Library: Foundation | ||||||
| // Package: Threading | // Package: Threading | ||||||
| @@ -110,6 +110,22 @@ void ThreadImpl::joinImpl() | |||||||
| } | } | ||||||
|  |  | ||||||
|  |  | ||||||
|  | bool ThreadImpl::joinImpl(long milliseconds) | ||||||
|  | { | ||||||
|  | 	if (!_thread) return true; | ||||||
|  |  | ||||||
|  | 	switch (WaitForSingleObject(_thread, milliseconds + 1)) | ||||||
|  | 	{ | ||||||
|  | 	case WAIT_TIMEOUT: | ||||||
|  | 		return false; | ||||||
|  | 	case WAIT_OBJECT_0: | ||||||
|  | 		return true; | ||||||
|  | 	default: | ||||||
|  | 		throw SystemException("cannot join thread"); | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  |  | ||||||
|  |  | ||||||
| bool ThreadImpl::isRunningImpl() const | bool ThreadImpl::isRunningImpl() const | ||||||
| { | { | ||||||
| 	if (_thread) | 	if (_thread) | ||||||
|   | |||||||
| @@ -1,13 +1,13 @@ | |||||||
| // | // | ||||||
| // UTF16Encoding.cpp | // UTF16Encoding.cpp | ||||||
| // | // | ||||||
| // $Id: //poco/Main/Foundation/src/UTF16Encoding.cpp#12 $ | // $Id: //poco/Main/Foundation/src/UTF16Encoding.cpp#13 $ | ||||||
| // | // | ||||||
| // Library: Foundation | // Library: Foundation | ||||||
| // Package: Text | // Package: Text | ||||||
| // Module:  UTF16Encoding | // Module:  UTF16Encoding | ||||||
| // | // | ||||||
| // Copyright (c) 2004-2006, Applied Informatics Software Engineering GmbH. | // Copyright (c) 2004-2007, Applied Informatics Software Engineering GmbH. | ||||||
| // and Contributors. | // and Contributors. | ||||||
| // | // | ||||||
| // Permission is hereby granted, free of charge, to any person or organization | // Permission is hereby granted, free of charge, to any person or organization | ||||||
| @@ -36,11 +36,20 @@ | |||||||
|  |  | ||||||
| #include "Poco/UTF16Encoding.h" | #include "Poco/UTF16Encoding.h" | ||||||
| #include "Poco/ByteOrder.h" | #include "Poco/ByteOrder.h" | ||||||
|  | #include "Poco/String.h" | ||||||
|  |  | ||||||
|  |  | ||||||
| namespace Poco { | namespace Poco { | ||||||
|  |  | ||||||
|  |  | ||||||
|  | const char* UTF16Encoding::_names[] = | ||||||
|  | { | ||||||
|  | 	"UTF-16", | ||||||
|  | 	"UTF16", | ||||||
|  | 	NULL | ||||||
|  | }; | ||||||
|  |  | ||||||
|  |  | ||||||
| const TextEncoding::CharacterMap UTF16Encoding::_charMap =  | const TextEncoding::CharacterMap UTF16Encoding::_charMap =  | ||||||
| { | { | ||||||
| 	/* 00 */	-2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2,  | 	/* 00 */	-2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2,  | ||||||
| @@ -105,6 +114,23 @@ void UTF16Encoding::setByteOrder(int byteOrderMark) | |||||||
| } | } | ||||||
|  |  | ||||||
|  |  | ||||||
|  | const char* UTF16Encoding::canonicalName() const | ||||||
|  | { | ||||||
|  | 	return _names[0]; | ||||||
|  | } | ||||||
|  |  | ||||||
|  |  | ||||||
|  | bool UTF16Encoding::isA(const std::string& encodingName) const | ||||||
|  | { | ||||||
|  | 	for (const char** name = _names; *name; ++name) | ||||||
|  | 	{ | ||||||
|  | 		if (Poco::icompare(encodingName, *name) == 0) | ||||||
|  | 			return true; | ||||||
|  | 	} | ||||||
|  | 	return false; | ||||||
|  | } | ||||||
|  |  | ||||||
|  |  | ||||||
| const TextEncoding::CharacterMap& UTF16Encoding::characterMap() const | const TextEncoding::CharacterMap& UTF16Encoding::characterMap() const | ||||||
| { | { | ||||||
| 	return _charMap; | 	return _charMap; | ||||||
|   | |||||||
| @@ -1,13 +1,13 @@ | |||||||
| // | // | ||||||
| // UTF8Encoding.cpp | // UTF8Encoding.cpp | ||||||
| // | // | ||||||
| // $Id: //poco/Main/Foundation/src/UTF8Encoding.cpp#12 $ | // $Id: //poco/Main/Foundation/src/UTF8Encoding.cpp#13 $ | ||||||
| // | // | ||||||
| // Library: Foundation | // Library: Foundation | ||||||
| // Package: Text | // Package: Text | ||||||
| // Module:  UTF8Encoding | // Module:  UTF8Encoding | ||||||
| // | // | ||||||
| // Copyright (c) 2004-2006, Applied Informatics Software Engineering GmbH. | // Copyright (c) 2004-2007, Applied Informatics Software Engineering GmbH. | ||||||
| // and Contributors. | // and Contributors. | ||||||
| // | // | ||||||
| // Permission is hereby granted, free of charge, to any person or organization | // Permission is hereby granted, free of charge, to any person or organization | ||||||
| @@ -35,11 +35,20 @@ | |||||||
|  |  | ||||||
|  |  | ||||||
| #include "Poco/UTF8Encoding.h" | #include "Poco/UTF8Encoding.h" | ||||||
|  | #include "Poco/String.h" | ||||||
|  |  | ||||||
|  |  | ||||||
| namespace Poco { | namespace Poco { | ||||||
|  |  | ||||||
|  |  | ||||||
|  | const char* UTF8Encoding::_names[] = | ||||||
|  | { | ||||||
|  | 	"UTF-8", | ||||||
|  | 	"UTF8", | ||||||
|  | 	NULL | ||||||
|  | }; | ||||||
|  |  | ||||||
|  |  | ||||||
| const TextEncoding::CharacterMap UTF8Encoding::_charMap =  | const TextEncoding::CharacterMap UTF8Encoding::_charMap =  | ||||||
| { | { | ||||||
| 	/* 00 */	0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,  | 	/* 00 */	0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,  | ||||||
| @@ -71,6 +80,23 @@ UTF8Encoding::~UTF8Encoding() | |||||||
| } | } | ||||||
|  |  | ||||||
|  |  | ||||||
|  | const char* UTF8Encoding::canonicalName() const | ||||||
|  | { | ||||||
|  | 	return _names[0]; | ||||||
|  | } | ||||||
|  |  | ||||||
|  |  | ||||||
|  | bool UTF8Encoding::isA(const std::string& encodingName) const | ||||||
|  | { | ||||||
|  | 	for (const char** name = _names; *name; ++name) | ||||||
|  | 	{ | ||||||
|  | 		if (Poco::icompare(encodingName, *name) == 0) | ||||||
|  | 			return true; | ||||||
|  | 	} | ||||||
|  | 	return false; | ||||||
|  | } | ||||||
|  |  | ||||||
|  |  | ||||||
| const TextEncoding::CharacterMap& UTF8Encoding::characterMap() const | const TextEncoding::CharacterMap& UTF8Encoding::characterMap() const | ||||||
| { | { | ||||||
| 	return _charMap; | 	return _charMap; | ||||||
|   | |||||||
| @@ -1,13 +1,13 @@ | |||||||
| // | // | ||||||
| // Windows1252Encoding.cpp | // Windows1252Encoding.cpp | ||||||
| // | // | ||||||
| // $Id: //poco/Main/Foundation/src/Windows1252Encoding.cpp#6 $ | // $Id: //poco/Main/Foundation/src/Windows1252Encoding.cpp#7 $ | ||||||
| // | // | ||||||
| // Library: Foundation | // Library: Foundation | ||||||
| // Package: Text | // Package: Text | ||||||
| // Module:  Windows1252Encoding | // Module:  Windows1252Encoding | ||||||
| // | // | ||||||
| // Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH. | // Copyright (c) 2005-2007, Applied Informatics Software Engineering GmbH. | ||||||
| // and Contributors. | // and Contributors. | ||||||
| // | // | ||||||
| // Permission is hereby granted, free of charge, to any person or organization | // Permission is hereby granted, free of charge, to any person or organization | ||||||
| @@ -35,11 +35,20 @@ | |||||||
|  |  | ||||||
|  |  | ||||||
| #include "Poco/Windows1252Encoding.h" | #include "Poco/Windows1252Encoding.h" | ||||||
|  | #include "Poco/String.h" | ||||||
|  |  | ||||||
|  |  | ||||||
| namespace Poco { | namespace Poco { | ||||||
|  |  | ||||||
|  |  | ||||||
|  | const char* Windows1252Encoding::_names[] = | ||||||
|  | { | ||||||
|  | 	"Windows-1252", | ||||||
|  | 	"CP1252", | ||||||
|  | 	NULL | ||||||
|  | }; | ||||||
|  |  | ||||||
|  |  | ||||||
| const TextEncoding::CharacterMap Windows1252Encoding::_charMap =  | const TextEncoding::CharacterMap Windows1252Encoding::_charMap =  | ||||||
| { | { | ||||||
| 	/*          00      01      02      03      04      05      06      07      08      09      0a      0b      0c      0d      0e      0f   */ | 	/*          00      01      02      03      04      05      06      07      08      09      0a      0b      0c      0d      0e      0f   */ | ||||||
| @@ -72,6 +81,23 @@ Windows1252Encoding::~Windows1252Encoding() | |||||||
| } | } | ||||||
|  |  | ||||||
|  |  | ||||||
|  | const char* Windows1252Encoding::canonicalName() const | ||||||
|  | { | ||||||
|  | 	return _names[0]; | ||||||
|  | } | ||||||
|  |  | ||||||
|  |  | ||||||
|  | bool Windows1252Encoding::isA(const std::string& encodingName) const | ||||||
|  | { | ||||||
|  | 	for (const char** name = _names; *name; ++name) | ||||||
|  | 	{ | ||||||
|  | 		if (Poco::icompare(encodingName, *name) == 0) | ||||||
|  | 			return true; | ||||||
|  | 	} | ||||||
|  | 	return false; | ||||||
|  | } | ||||||
|  |  | ||||||
|  |  | ||||||
| const TextEncoding::CharacterMap& Windows1252Encoding::characterMap() const | const TextEncoding::CharacterMap& Windows1252Encoding::characterMap() const | ||||||
| { | { | ||||||
| 	return _charMap; | 	return _charMap; | ||||||
|   | |||||||
| @@ -577,6 +577,9 @@ | |||||||
| 				<File | 				<File | ||||||
| 					RelativePath=".\src\ActivityTest.cpp"> | 					RelativePath=".\src\ActivityTest.cpp"> | ||||||
| 				</File> | 				</File> | ||||||
|  | 				<File | ||||||
|  | 					RelativePath=".\src\ConditionTest.cpp"> | ||||||
|  | 				</File> | ||||||
| 				<File | 				<File | ||||||
| 					RelativePath=".\src\RWLockTest.cpp"> | 					RelativePath=".\src\RWLockTest.cpp"> | ||||||
| 				</File> | 				</File> | ||||||
| @@ -611,6 +614,9 @@ | |||||||
| 				<File | 				<File | ||||||
| 					RelativePath=".\src\ActivityTest.h"> | 					RelativePath=".\src\ActivityTest.h"> | ||||||
| 				</File> | 				</File> | ||||||
|  | 				<File | ||||||
|  | 					RelativePath=".\src\ConditionTest.h"> | ||||||
|  | 				</File> | ||||||
| 				<File | 				<File | ||||||
| 					RelativePath=".\src\RWLockTest.h"> | 					RelativePath=".\src\RWLockTest.h"> | ||||||
| 				</File> | 				</File> | ||||||
| @@ -892,6 +898,9 @@ | |||||||
| 				<File | 				<File | ||||||
| 					RelativePath=".\src\TextConverterTest.cpp"> | 					RelativePath=".\src\TextConverterTest.cpp"> | ||||||
| 				</File> | 				</File> | ||||||
|  | 				<File | ||||||
|  | 					RelativePath=".\src\TextEncodingTest.cpp"> | ||||||
|  | 				</File> | ||||||
| 				<File | 				<File | ||||||
| 					RelativePath=".\src\TextIteratorTest.cpp"> | 					RelativePath=".\src\TextIteratorTest.cpp"> | ||||||
| 				</File> | 				</File> | ||||||
| @@ -908,6 +917,9 @@ | |||||||
| 				<File | 				<File | ||||||
| 					RelativePath=".\src\TextConverterTest.h"> | 					RelativePath=".\src\TextConverterTest.h"> | ||||||
| 				</File> | 				</File> | ||||||
|  | 				<File | ||||||
|  | 					RelativePath=".\src\TextEncodingTest.h"> | ||||||
|  | 				</File> | ||||||
| 				<File | 				<File | ||||||
| 					RelativePath=".\src\TextIteratorTest.h"> | 					RelativePath=".\src\TextIteratorTest.h"> | ||||||
| 				</File> | 				</File> | ||||||
|   | |||||||
| @@ -1,7 +1,7 @@ | |||||||
| <?xml version="1.0" encoding="Windows-1252"?> | <?xml version="1.0" encoding="Windows-1252"?> | ||||||
| <VisualStudioProject | <VisualStudioProject | ||||||
| 	ProjectType="Visual C++" | 	ProjectType="Visual C++" | ||||||
| 	Version="8,00" | 	Version="8.00" | ||||||
| 	Name="TestSuite" | 	Name="TestSuite" | ||||||
| 	ProjectGUID="{F1EE93DF-347F-4CB3-B191-C4E63F38E972}" | 	ProjectGUID="{F1EE93DF-347F-4CB3-B191-C4E63F38E972}" | ||||||
| 	Keyword="Win32Proj" | 	Keyword="Win32Proj" | ||||||
| @@ -790,6 +790,10 @@ | |||||||
| 					RelativePath=".\src\ActivityTest.cpp" | 					RelativePath=".\src\ActivityTest.cpp" | ||||||
| 					> | 					> | ||||||
| 				</File> | 				</File> | ||||||
|  | 				<File | ||||||
|  | 					RelativePath=".\src\ConditionTest.cpp" | ||||||
|  | 					> | ||||||
|  | 				</File> | ||||||
| 				<File | 				<File | ||||||
| 					RelativePath=".\src\RWLockTest.cpp" | 					RelativePath=".\src\RWLockTest.cpp" | ||||||
| 					> | 					> | ||||||
| @@ -834,6 +838,10 @@ | |||||||
| 					RelativePath=".\src\ActivityTest.h" | 					RelativePath=".\src\ActivityTest.h" | ||||||
| 					> | 					> | ||||||
| 				</File> | 				</File> | ||||||
|  | 				<File | ||||||
|  | 					RelativePath=".\src\ConditionTest.h" | ||||||
|  | 					> | ||||||
|  | 				</File> | ||||||
| 				<File | 				<File | ||||||
| 					RelativePath=".\src\RWLockTest.h" | 					RelativePath=".\src\RWLockTest.h" | ||||||
| 					> | 					> | ||||||
| @@ -1186,6 +1194,10 @@ | |||||||
| 					RelativePath=".\src\TextConverterTest.cpp" | 					RelativePath=".\src\TextConverterTest.cpp" | ||||||
| 					> | 					> | ||||||
| 				</File> | 				</File> | ||||||
|  | 				<File | ||||||
|  | 					RelativePath=".\src\TextEncodingTest.cpp" | ||||||
|  | 					> | ||||||
|  | 				</File> | ||||||
| 				<File | 				<File | ||||||
| 					RelativePath=".\src\TextIteratorTest.cpp" | 					RelativePath=".\src\TextIteratorTest.cpp" | ||||||
| 					> | 					> | ||||||
| @@ -1206,6 +1218,10 @@ | |||||||
| 					RelativePath=".\src\TextConverterTest.h" | 					RelativePath=".\src\TextConverterTest.h" | ||||||
| 					> | 					> | ||||||
| 				</File> | 				</File> | ||||||
|  | 				<File | ||||||
|  | 					RelativePath=".\src\TextEncodingTest.h" | ||||||
|  | 					> | ||||||
|  | 				</File> | ||||||
| 				<File | 				<File | ||||||
| 					RelativePath=".\src\TextIteratorTest.h" | 					RelativePath=".\src\TextIteratorTest.h" | ||||||
| 					> | 					> | ||||||
|   | |||||||
							
								
								
									
										214
									
								
								Foundation/testsuite/src/ConditionTest.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										214
									
								
								Foundation/testsuite/src/ConditionTest.cpp
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,214 @@ | |||||||
|  | // | ||||||
|  | // ConditionTest.cpp | ||||||
|  | // | ||||||
|  | // $Id: //poco/Main/Foundation/testsuite/src/ConditionTest.cpp#1 $ | ||||||
|  | // | ||||||
|  | // Copyright (c) 2007, Applied Informatics Software Engineering GmbH. | ||||||
|  | // and Contributors. | ||||||
|  | // | ||||||
|  | // Permission is hereby granted, free of charge, to any person or organization | ||||||
|  | // obtaining a copy of the software and accompanying documentation covered by | ||||||
|  | // this license (the "Software") to use, reproduce, display, distribute, | ||||||
|  | // execute, and transmit the Software, and to prepare derivative works of the | ||||||
|  | // Software, and to permit third-parties to whom the Software is furnished to | ||||||
|  | // do so, all subject to the following: | ||||||
|  | //  | ||||||
|  | // The copyright notices in the Software and this entire statement, including | ||||||
|  | // the above license grant, this restriction and the following disclaimer, | ||||||
|  | // must be included in all copies of the Software, in whole or in part, and | ||||||
|  | // all derivative works of the Software, unless such copies or derivative | ||||||
|  | // works are solely in the form of machine-executable object code generated by | ||||||
|  | // a source language processor. | ||||||
|  | //  | ||||||
|  | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||||||
|  | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||||||
|  | // FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT | ||||||
|  | // SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE | ||||||
|  | // FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE, | ||||||
|  | // ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER | ||||||
|  | // DEALINGS IN THE SOFTWARE. | ||||||
|  | // | ||||||
|  |  | ||||||
|  |  | ||||||
|  | #include "ConditionTest.h" | ||||||
|  | #include "CppUnit/TestCaller.h" | ||||||
|  | #include "CppUnit/TestSuite.h" | ||||||
|  | #include "Poco/Thread.h" | ||||||
|  | #include "Poco/Runnable.h" | ||||||
|  | #include "Poco/Condition.h" | ||||||
|  | #include "Poco/Mutex.h" | ||||||
|  | #include "Poco/Exception.h" | ||||||
|  |  | ||||||
|  |  | ||||||
|  | using Poco::Thread; | ||||||
|  | using Poco::Runnable; | ||||||
|  | using Poco::Condition; | ||||||
|  | using Poco::Mutex; | ||||||
|  | using Poco::TimeoutException; | ||||||
|  |  | ||||||
|  |  | ||||||
|  | namespace | ||||||
|  | { | ||||||
|  | 	class WaitRunnable: public Runnable | ||||||
|  | 	{ | ||||||
|  | 	public: | ||||||
|  | 		WaitRunnable(Condition& cond, Mutex& mutex): | ||||||
|  | 			_ran(false), | ||||||
|  | 			_cond(cond), | ||||||
|  | 			_mutex(mutex) | ||||||
|  | 		{ | ||||||
|  | 		} | ||||||
|  | 		 | ||||||
|  | 		void run() | ||||||
|  | 		{ | ||||||
|  | 			_mutex.lock(); | ||||||
|  | 			_cond.wait(_mutex); | ||||||
|  | 			_mutex.unlock(); | ||||||
|  | 			_ran = true; | ||||||
|  | 		} | ||||||
|  | 		 | ||||||
|  | 		bool ran() const | ||||||
|  | 		{ | ||||||
|  | 			return _ran; | ||||||
|  | 		} | ||||||
|  | 			 | ||||||
|  | 	private: | ||||||
|  | 		bool _ran; | ||||||
|  | 		Condition& _cond; | ||||||
|  | 		Mutex& _mutex; | ||||||
|  | 	}; | ||||||
|  | 	 | ||||||
|  | 	class TryWaitRunnable: public Runnable | ||||||
|  | 	{ | ||||||
|  | 	public: | ||||||
|  | 		TryWaitRunnable(Condition& cond, Mutex& mutex): | ||||||
|  | 			_ran(false), | ||||||
|  | 			_cond(cond), | ||||||
|  | 			_mutex(mutex) | ||||||
|  | 		{ | ||||||
|  | 		} | ||||||
|  | 		 | ||||||
|  | 		void run() | ||||||
|  | 		{ | ||||||
|  | 			_mutex.lock(); | ||||||
|  | 			if (_cond.tryWait(_mutex, 10000)) | ||||||
|  | 			{ | ||||||
|  | 				_ran = true; | ||||||
|  | 			} | ||||||
|  | 			_mutex.unlock(); | ||||||
|  | 		} | ||||||
|  | 		 | ||||||
|  | 		bool ran() const | ||||||
|  | 		{ | ||||||
|  | 			return _ran; | ||||||
|  | 		} | ||||||
|  | 			 | ||||||
|  | 	private: | ||||||
|  | 		bool _ran; | ||||||
|  | 		Condition& _cond; | ||||||
|  | 		Mutex& _mutex; | ||||||
|  | 	}; | ||||||
|  |  | ||||||
|  | } | ||||||
|  |  | ||||||
|  |  | ||||||
|  | ConditionTest::ConditionTest(const std::string& name): CppUnit::TestCase(name) | ||||||
|  | { | ||||||
|  | } | ||||||
|  |  | ||||||
|  |  | ||||||
|  | ConditionTest::~ConditionTest() | ||||||
|  | { | ||||||
|  | } | ||||||
|  |  | ||||||
|  |  | ||||||
|  | void ConditionTest::testSignal() | ||||||
|  | { | ||||||
|  | 	Condition cond; | ||||||
|  | 	Mutex mtx; | ||||||
|  | 	WaitRunnable r1(cond, mtx); | ||||||
|  | 	WaitRunnable r2(cond, mtx); | ||||||
|  | 	 | ||||||
|  | 	Thread t1; | ||||||
|  | 	Thread t2; | ||||||
|  | 	 | ||||||
|  | 	t1.start(r1); | ||||||
|  | 	Thread::sleep(200); | ||||||
|  | 	t2.start(r2); | ||||||
|  | 	 | ||||||
|  | 	assert (!r1.ran()); | ||||||
|  | 	assert (!r2.ran()); | ||||||
|  | 	 | ||||||
|  | 	cond.signal(); | ||||||
|  | 	 | ||||||
|  | 	t1.join(); | ||||||
|  | 	assert (r1.ran()); | ||||||
|  | 	 | ||||||
|  | 	assert (!t2.tryJoin(200)); | ||||||
|  | 	 | ||||||
|  | 	cond.signal(); | ||||||
|  | 	 | ||||||
|  | 	t2.join(); | ||||||
|  |  | ||||||
|  | 	assert (r2.ran()); | ||||||
|  | } | ||||||
|  |  | ||||||
|  |  | ||||||
|  | void ConditionTest::testBroadcast() | ||||||
|  | { | ||||||
|  | 	Condition cond; | ||||||
|  | 	Mutex mtx; | ||||||
|  | 	WaitRunnable r1(cond, mtx); | ||||||
|  | 	WaitRunnable r2(cond, mtx); | ||||||
|  | 	TryWaitRunnable r3(cond, mtx); | ||||||
|  | 	 | ||||||
|  | 	Thread t1; | ||||||
|  | 	Thread t2; | ||||||
|  | 	Thread t3; | ||||||
|  | 	 | ||||||
|  | 	t1.start(r1); | ||||||
|  | 	Thread::sleep(200); | ||||||
|  | 	t2.start(r2); | ||||||
|  | 	Thread::sleep(200); | ||||||
|  | 	t3.start(r3); | ||||||
|  | 	 | ||||||
|  | 	assert (!r1.ran()); | ||||||
|  | 	assert (!r2.ran()); | ||||||
|  | 	assert (!r3.ran()); | ||||||
|  | 	 | ||||||
|  | 	cond.signal(); | ||||||
|  | 	t1.join(); | ||||||
|  | 	 | ||||||
|  | 	assert (r1.ran()); | ||||||
|  | 	assert (!t2.tryJoin(500)); | ||||||
|  | 	assert (!t3.tryJoin(500)); | ||||||
|  | 	 | ||||||
|  | 	cond.broadcast(); | ||||||
|  | 	 | ||||||
|  | 	t2.join(); | ||||||
|  | 	t3.join(); | ||||||
|  | 	 | ||||||
|  | 	assert (r2.ran()); | ||||||
|  | 	assert (r3.ran()); | ||||||
|  | } | ||||||
|  |  | ||||||
|  |  | ||||||
|  | void ConditionTest::setUp() | ||||||
|  | { | ||||||
|  | } | ||||||
|  |  | ||||||
|  |  | ||||||
|  | void ConditionTest::tearDown() | ||||||
|  | { | ||||||
|  | } | ||||||
|  |  | ||||||
|  |  | ||||||
|  | CppUnit::Test* ConditionTest::suite() | ||||||
|  | { | ||||||
|  | 	CppUnit::TestSuite* pSuite = new CppUnit::TestSuite("ConditionTest"); | ||||||
|  |  | ||||||
|  | 	CppUnit_addTest(pSuite, ConditionTest, testSignal); | ||||||
|  | 	CppUnit_addTest(pSuite, ConditionTest, testBroadcast); | ||||||
|  |  | ||||||
|  | 	return pSuite; | ||||||
|  | } | ||||||
							
								
								
									
										61
									
								
								Foundation/testsuite/src/ConditionTest.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										61
									
								
								Foundation/testsuite/src/ConditionTest.h
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,61 @@ | |||||||
|  | // | ||||||
|  | // ConditionTest.h | ||||||
|  | // | ||||||
|  | // $Id: //poco/Main/Foundation/testsuite/src/ConditionTest.h#1 $ | ||||||
|  | // | ||||||
|  | // Definition of the ConditionTest class. | ||||||
|  | // | ||||||
|  | // Copyright (c) 2007, Applied Informatics Software Engineering GmbH. | ||||||
|  | // and Contributors. | ||||||
|  | // | ||||||
|  | // Permission is hereby granted, free of charge, to any person or organization | ||||||
|  | // obtaining a copy of the software and accompanying documentation covered by | ||||||
|  | // this license (the "Software") to use, reproduce, display, distribute, | ||||||
|  | // execute, and transmit the Software, and to prepare derivative works of the | ||||||
|  | // Software, and to permit third-parties to whom the Software is furnished to | ||||||
|  | // do so, all subject to the following: | ||||||
|  | //  | ||||||
|  | // The copyright notices in the Software and this entire statement, including | ||||||
|  | // the above license grant, this restriction and the following disclaimer, | ||||||
|  | // must be included in all copies of the Software, in whole or in part, and | ||||||
|  | // all derivative works of the Software, unless such copies or derivative | ||||||
|  | // works are solely in the form of machine-executable object code generated by | ||||||
|  | // a source language processor. | ||||||
|  | //  | ||||||
|  | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||||||
|  | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||||||
|  | // FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT | ||||||
|  | // SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE | ||||||
|  | // FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE, | ||||||
|  | // ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER | ||||||
|  | // DEALINGS IN THE SOFTWARE. | ||||||
|  | // | ||||||
|  |  | ||||||
|  |  | ||||||
|  | #ifndef ConditionTest_INCLUDED | ||||||
|  | #define ConditionTest_INCLUDED | ||||||
|  |  | ||||||
|  |  | ||||||
|  | #include "Poco/Foundation.h" | ||||||
|  | #include "CppUnit/TestCase.h" | ||||||
|  |  | ||||||
|  |  | ||||||
|  | class ConditionTest: public CppUnit::TestCase | ||||||
|  | { | ||||||
|  | public: | ||||||
|  | 	ConditionTest(const std::string& name); | ||||||
|  | 	~ConditionTest(); | ||||||
|  |  | ||||||
|  | 	void testSignal(); | ||||||
|  | 	void testBroadcast(); | ||||||
|  |  | ||||||
|  | 	void setUp(); | ||||||
|  | 	void tearDown(); | ||||||
|  |  | ||||||
|  | 	static CppUnit::Test* suite(); | ||||||
|  |  | ||||||
|  | private: | ||||||
|  | }; | ||||||
|  |  | ||||||
|  |  | ||||||
|  | #endif // ConditionTest_INCLUDED | ||||||
| @@ -1,7 +1,7 @@ | |||||||
| // | // | ||||||
| // DynamicAnyTest.cpp | // DynamicAnyTest.cpp | ||||||
| // | // | ||||||
| // $Id: //poco/Main/Foundation/testsuite/src/DynamicAnyTest.cpp#3 $ | // $Id: //poco/Main/Foundation/testsuite/src/DynamicAnyTest.cpp#5 $ | ||||||
| // | // | ||||||
| // Copyright (c) 2006, Applied Informatics Software Engineering GmbH. | // Copyright (c) 2006, Applied Informatics Software Engineering GmbH. | ||||||
| // and Contributors. | // and Contributors. | ||||||
|   | |||||||
| @@ -1,7 +1,7 @@ | |||||||
| // | // | ||||||
| // DynamicAnyTest.h | // DynamicAnyTest.h | ||||||
| // | // | ||||||
| // $Id: //poco/Main/Foundation/testsuite/src/DynamicAnyTest.h#2 $ | // $Id: //poco/Main/Foundation/testsuite/src/DynamicAnyTest.h#3 $ | ||||||
| // | // | ||||||
| // Tests for Any types | // Tests for Any types | ||||||
| // | // | ||||||
|   | |||||||
| @@ -1,7 +1,7 @@ | |||||||
| // | // | ||||||
| // FileChannelTest.cpp | // FileChannelTest.cpp | ||||||
| // | // | ||||||
| // $Id: //poco/Main/Foundation/testsuite/src/FileChannelTest.cpp#13 $ | // $Id: //poco/Main/Foundation/testsuite/src/FileChannelTest.cpp#14 $ | ||||||
| // | // | ||||||
| // Copyright (c) 2004-2006, Applied Informatics Software Engineering GmbH. | // Copyright (c) 2004-2006, Applied Informatics Software Engineering GmbH. | ||||||
| // and Contributors. | // and Contributors. | ||||||
|   | |||||||
| @@ -1,7 +1,7 @@ | |||||||
| // | // | ||||||
| // FileChannelTest.h | // FileChannelTest.h | ||||||
| // | // | ||||||
| // $Id: //poco/Main/Foundation/testsuite/src/FileChannelTest.h#10 $ | // $Id: //poco/Main/Foundation/testsuite/src/FileChannelTest.h#11 $ | ||||||
| // | // | ||||||
| // Definition of the FileChannelTest class. | // Definition of the FileChannelTest class. | ||||||
| // | // | ||||||
|   | |||||||
| @@ -1,7 +1,7 @@ | |||||||
| // | // | ||||||
| // FileTest.cpp | // FileTest.cpp | ||||||
| // | // | ||||||
| // $Id: //poco/Main/Foundation/testsuite/src/FileTest.cpp#13 $ | // $Id: //poco/Main/Foundation/testsuite/src/FileTest.cpp#14 $ | ||||||
| // | // | ||||||
| // Copyright (c) 2004-2006, Applied Informatics Software Engineering GmbH. | // Copyright (c) 2004-2006, Applied Informatics Software Engineering GmbH. | ||||||
| // and Contributors. | // and Contributors. | ||||||
| @@ -390,6 +390,76 @@ void FileTest::testMove() | |||||||
| } | } | ||||||
|  |  | ||||||
|  |  | ||||||
|  | void FileTest::testCopyDirectory() | ||||||
|  | { | ||||||
|  | 	Path pd1("testdir"); | ||||||
|  | 	File fd1(pd1); | ||||||
|  | 	try | ||||||
|  | 	{ | ||||||
|  | 		fd1.remove(true); | ||||||
|  | 	} | ||||||
|  | 	catch (...) | ||||||
|  | 	{ | ||||||
|  | 	} | ||||||
|  | 	fd1.createDirectories(); | ||||||
|  | 	Path pd2(pd1, "subdir"); | ||||||
|  | 	File fd2(pd2); | ||||||
|  | 	fd2.createDirectories(); | ||||||
|  | 	Path pf1(pd1, "testfile1.dat"); | ||||||
|  | 	std::ofstream ostr1(pf1.toString().c_str()); | ||||||
|  | 	ostr1 << "Hello, world!" << std::endl; | ||||||
|  | 	ostr1.close(); | ||||||
|  | 	Path pf2(pd1, "testfile2.dat"); | ||||||
|  | 	std::ofstream ostr2(pf2.toString().c_str()); | ||||||
|  | 	ostr2 << "Hello, world!" << std::endl; | ||||||
|  | 	ostr2.close(); | ||||||
|  | 	Path pf3(pd2, "testfile3.dat"); | ||||||
|  | 	std::ofstream ostr3(pf3.toString().c_str()); | ||||||
|  | 	ostr3 << "Hello, world!" << std::endl; | ||||||
|  | 	ostr3.close(); | ||||||
|  | 	 | ||||||
|  | 	File fd3("testdir2"); | ||||||
|  | 	 | ||||||
|  | 	try | ||||||
|  | 	{ | ||||||
|  | 		fd3.remove(true); | ||||||
|  | 	} | ||||||
|  | 	catch (...) | ||||||
|  | 	{ | ||||||
|  | 	} | ||||||
|  | 	 | ||||||
|  | 	fd1.copyTo("testdir2"); | ||||||
|  | 	 | ||||||
|  | 	Path pd1t("testdir2"); | ||||||
|  | 	File fd1t(pd1t); | ||||||
|  | 	assert (fd1t.exists()); | ||||||
|  | 	assert (fd1t.isDirectory()); | ||||||
|  | 	 | ||||||
|  | 	Path pd2t(pd1t, "subdir"); | ||||||
|  | 	File fd2t(pd2t); | ||||||
|  | 	assert (fd2t.exists()); | ||||||
|  | 	assert (fd2t.isDirectory()); | ||||||
|  | 	 | ||||||
|  | 	Path pf1t(pd1t, "testfile1.dat"); | ||||||
|  | 	File ff1t(pf1t); | ||||||
|  | 	assert (ff1t.exists()); | ||||||
|  | 	assert (ff1t.isFile()); | ||||||
|  |  | ||||||
|  | 	Path pf2t(pd1t, "testfile2.dat"); | ||||||
|  | 	File ff2t(pf2t); | ||||||
|  | 	assert (ff2t.exists()); | ||||||
|  | 	assert (ff2t.isFile()); | ||||||
|  |  | ||||||
|  | 	Path pf3t(pd2t, "testfile3.dat"); | ||||||
|  | 	File ff3t(pf3t); | ||||||
|  | 	assert (ff3t.exists()); | ||||||
|  | 	assert (ff3t.isFile()); | ||||||
|  | 	 | ||||||
|  | 	fd1.remove(true); | ||||||
|  | 	fd3.remove(true); | ||||||
|  | } | ||||||
|  |  | ||||||
|  |  | ||||||
| void FileTest::testRename() | void FileTest::testRename() | ||||||
| { | { | ||||||
| 	std::ofstream ostr("testfile.dat"); | 	std::ofstream ostr("testfile.dat"); | ||||||
| @@ -446,6 +516,7 @@ CppUnit::Test* FileTest::suite() | |||||||
| 	CppUnit_addTest(pSuite, FileTest, testDirectory); | 	CppUnit_addTest(pSuite, FileTest, testDirectory); | ||||||
| 	CppUnit_addTest(pSuite, FileTest, testCopy); | 	CppUnit_addTest(pSuite, FileTest, testCopy); | ||||||
| 	CppUnit_addTest(pSuite, FileTest, testMove); | 	CppUnit_addTest(pSuite, FileTest, testMove); | ||||||
|  | 	CppUnit_addTest(pSuite, FileTest, testCopyDirectory); | ||||||
| 	CppUnit_addTest(pSuite, FileTest, testRename); | 	CppUnit_addTest(pSuite, FileTest, testRename); | ||||||
| 	CppUnit_addTest(pSuite, FileTest, testRootDir); | 	CppUnit_addTest(pSuite, FileTest, testRootDir); | ||||||
|  |  | ||||||
|   | |||||||
| @@ -1,7 +1,7 @@ | |||||||
| // | // | ||||||
| // FileTest.h | // FileTest.h | ||||||
| // | // | ||||||
| // $Id: //poco/Main/Foundation/testsuite/src/FileTest.h#10 $ | // $Id: //poco/Main/Foundation/testsuite/src/FileTest.h#11 $ | ||||||
| // | // | ||||||
| // Definition of the FileTest class. | // Definition of the FileTest class. | ||||||
| // | // | ||||||
| @@ -55,6 +55,7 @@ public: | |||||||
| 	void testDirectory(); | 	void testDirectory(); | ||||||
| 	void testCopy(); | 	void testCopy(); | ||||||
| 	void testMove(); | 	void testMove(); | ||||||
|  | 	void testCopyDirectory(); | ||||||
| 	void testRename(); | 	void testRename(); | ||||||
| 	void testRootDir(); | 	void testRootDir(); | ||||||
| 	 | 	 | ||||||
|   | |||||||
| @@ -1,7 +1,7 @@ | |||||||
| // | // | ||||||
| // TaskManagerTest.cpp | // TaskManagerTest.cpp | ||||||
| // | // | ||||||
| // $Id: //poco/Main/Foundation/testsuite/src/TaskManagerTest.cpp#8 $ | // $Id: //poco/Main/Foundation/testsuite/src/TaskManagerTest.cpp#9 $ | ||||||
| // | // | ||||||
| // Copyright (c) 2004-2006, Applied Informatics Software Engineering GmbH. | // Copyright (c) 2004-2006, Applied Informatics Software Engineering GmbH. | ||||||
| // and Contributors. | // and Contributors. | ||||||
|   | |||||||
							
								
								
									
										89
									
								
								Foundation/testsuite/src/TextEncodingTest.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										89
									
								
								Foundation/testsuite/src/TextEncodingTest.cpp
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,89 @@ | |||||||
|  | // | ||||||
|  | // TextEncodingTest.cpp | ||||||
|  | // | ||||||
|  | // $Id: //poco/Main/Foundation/testsuite/src/TextEncodingTest.cpp#2 $ | ||||||
|  | // | ||||||
|  | // Copyright (c) 2004-2006, Applied Informatics Software Engineering GmbH. | ||||||
|  | // and Contributors. | ||||||
|  | // | ||||||
|  | // Permission is hereby granted, free of charge, to any person or organization | ||||||
|  | // obtaining a copy of the software and accompanying documentation covered by | ||||||
|  | // this license (the "Software") to use, reproduce, display, distribute, | ||||||
|  | // execute, and transmit the Software, and to prepare derivative works of the | ||||||
|  | // Software, and to permit third-parties to whom the Software is furnished to | ||||||
|  | // do so, all subject to the following: | ||||||
|  | //  | ||||||
|  | // The copyright notices in the Software and this entire statement, including | ||||||
|  | // the above license grant, this restriction and the following disclaimer, | ||||||
|  | // must be included in all copies of the Software, in whole or in part, and | ||||||
|  | // all derivative works of the Software, unless such copies or derivative | ||||||
|  | // works are solely in the form of machine-executable object code generated by | ||||||
|  | // a source language processor. | ||||||
|  | //  | ||||||
|  | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||||||
|  | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||||||
|  | // FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT | ||||||
|  | // SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE | ||||||
|  | // FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE, | ||||||
|  | // ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER | ||||||
|  | // DEALINGS IN THE SOFTWARE. | ||||||
|  | // | ||||||
|  |  | ||||||
|  |  | ||||||
|  | #include "TextEncodingTest.h" | ||||||
|  | #include "CppUnit/TestCaller.h" | ||||||
|  | #include "CppUnit/TestSuite.h" | ||||||
|  | #include "Poco/TextEncoding.h" | ||||||
|  | #include "Poco/Latin1Encoding.h" | ||||||
|  |  | ||||||
|  |  | ||||||
|  | using Poco::TextEncoding; | ||||||
|  | using Poco::Latin1Encoding; | ||||||
|  |  | ||||||
|  |  | ||||||
|  | TextEncodingTest::TextEncodingTest(const std::string& name): CppUnit::TestCase(name) | ||||||
|  | { | ||||||
|  | } | ||||||
|  |  | ||||||
|  |  | ||||||
|  | TextEncodingTest::~TextEncodingTest() | ||||||
|  | { | ||||||
|  | } | ||||||
|  |  | ||||||
|  |  | ||||||
|  | void TextEncodingTest::testTextEncoding() | ||||||
|  | { | ||||||
|  | 	TextEncoding& utf8 = TextEncoding::byName("utf8"); | ||||||
|  | 	assert (std::string("UTF-8") == utf8.canonicalName()); | ||||||
|  | 	 | ||||||
|  | 	TextEncoding& latin1 = TextEncoding::byName("latin1"); | ||||||
|  | 	assert (std::string("ISO-8859-1") == latin1.canonicalName()); | ||||||
|  | 	 | ||||||
|  | 	TextEncoding& glob = TextEncoding::global(); | ||||||
|  | 	assert (std::string("UTF-8") == glob.canonicalName()); | ||||||
|  | 	 | ||||||
|  | 	TextEncoding::global(new Latin1Encoding); | ||||||
|  |  | ||||||
|  | 	TextEncoding& glob2 = TextEncoding::global(); | ||||||
|  | 	assert (std::string("ISO-8859-1") == glob2.canonicalName()); | ||||||
|  | } | ||||||
|  |  | ||||||
|  |  | ||||||
|  | void TextEncodingTest::setUp() | ||||||
|  | { | ||||||
|  | } | ||||||
|  |  | ||||||
|  |  | ||||||
|  | void TextEncodingTest::tearDown() | ||||||
|  | { | ||||||
|  | } | ||||||
|  |  | ||||||
|  |  | ||||||
|  | CppUnit::Test* TextEncodingTest::suite() | ||||||
|  | { | ||||||
|  | 	CppUnit::TestSuite* pSuite = new CppUnit::TestSuite("TextEncodingTest"); | ||||||
|  |  | ||||||
|  | 	CppUnit_addTest(pSuite, TextEncodingTest, testTextEncoding); | ||||||
|  |  | ||||||
|  | 	return pSuite; | ||||||
|  | } | ||||||
							
								
								
									
										60
									
								
								Foundation/testsuite/src/TextEncodingTest.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										60
									
								
								Foundation/testsuite/src/TextEncodingTest.h
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,60 @@ | |||||||
|  | // | ||||||
|  | // TextEncodingTest.h | ||||||
|  | // | ||||||
|  | // $Id: //poco/Main/Foundation/testsuite/src/TextEncodingTest.h#1 $ | ||||||
|  | // | ||||||
|  | // Definition of the TextEncodingTest class. | ||||||
|  | // | ||||||
|  | // Copyright (c) 2007, Applied Informatics Software Engineering GmbH. | ||||||
|  | // and Contributors. | ||||||
|  | // | ||||||
|  | // Permission is hereby granted, free of charge, to any person or organization | ||||||
|  | // obtaining a copy of the software and accompanying documentation covered by | ||||||
|  | // this license (the "Software") to use, reproduce, display, distribute, | ||||||
|  | // execute, and transmit the Software, and to prepare derivative works of the | ||||||
|  | // Software, and to permit third-parties to whom the Software is furnished to | ||||||
|  | // do so, all subject to the following: | ||||||
|  | //  | ||||||
|  | // The copyright notices in the Software and this entire statement, including | ||||||
|  | // the above license grant, this restriction and the following disclaimer, | ||||||
|  | // must be included in all copies of the Software, in whole or in part, and | ||||||
|  | // all derivative works of the Software, unless such copies or derivative | ||||||
|  | // works are solely in the form of machine-executable object code generated by | ||||||
|  | // a source language processor. | ||||||
|  | //  | ||||||
|  | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||||||
|  | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||||||
|  | // FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT | ||||||
|  | // SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE | ||||||
|  | // FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE, | ||||||
|  | // ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER | ||||||
|  | // DEALINGS IN THE SOFTWARE. | ||||||
|  | // | ||||||
|  |  | ||||||
|  |  | ||||||
|  | #ifndef TextEncodingTest_INCLUDED | ||||||
|  | #define TextEncodingTest_INCLUDED | ||||||
|  |  | ||||||
|  |  | ||||||
|  | #include "Poco/Foundation.h" | ||||||
|  | #include "CppUnit/TestCase.h" | ||||||
|  |  | ||||||
|  |  | ||||||
|  | class TextEncodingTest: public CppUnit::TestCase | ||||||
|  | { | ||||||
|  | public: | ||||||
|  | 	TextEncodingTest(const std::string& name); | ||||||
|  | 	~TextEncodingTest(); | ||||||
|  |  | ||||||
|  | 	void testTextEncoding(); | ||||||
|  |  | ||||||
|  | 	void setUp(); | ||||||
|  | 	void tearDown(); | ||||||
|  |  | ||||||
|  | 	static CppUnit::Test* suite(); | ||||||
|  |  | ||||||
|  | private: | ||||||
|  | }; | ||||||
|  |  | ||||||
|  |  | ||||||
|  | #endif // TextEncodingTest_INCLUDED | ||||||
| @@ -1,7 +1,7 @@ | |||||||
| // | // | ||||||
| // TextTestSuite.cpp | // TextTestSuite.cpp | ||||||
| // | // | ||||||
| // $Id: //poco/Main/Foundation/testsuite/src/TextTestSuite.cpp#8 $ | // $Id: //poco/Main/Foundation/testsuite/src/TextTestSuite.cpp#9 $ | ||||||
| // | // | ||||||
| // Copyright (c) 2004-2006, Applied Informatics Software Engineering GmbH. | // Copyright (c) 2004-2006, Applied Informatics Software Engineering GmbH. | ||||||
| // and Contributors. | // and Contributors. | ||||||
| @@ -34,6 +34,7 @@ | |||||||
| #include "TextIteratorTest.h" | #include "TextIteratorTest.h" | ||||||
| #include "TextConverterTest.h" | #include "TextConverterTest.h" | ||||||
| #include "StreamConverterTest.h" | #include "StreamConverterTest.h" | ||||||
|  | #include "TextEncodingTest.h" | ||||||
|  |  | ||||||
|  |  | ||||||
| CppUnit::Test* TextTestSuite::suite() | CppUnit::Test* TextTestSuite::suite() | ||||||
| @@ -43,6 +44,7 @@ CppUnit::Test* TextTestSuite::suite() | |||||||
| 	pSuite->addTest(TextIteratorTest::suite()); | 	pSuite->addTest(TextIteratorTest::suite()); | ||||||
| 	pSuite->addTest(TextConverterTest::suite()); | 	pSuite->addTest(TextConverterTest::suite()); | ||||||
| 	pSuite->addTest(StreamConverterTest::suite()); | 	pSuite->addTest(StreamConverterTest::suite()); | ||||||
|  | 	pSuite->addTest(TextEncodingTest::suite()); | ||||||
|  |  | ||||||
| 	return pSuite; | 	return pSuite; | ||||||
| } | } | ||||||
|   | |||||||
| @@ -1,7 +1,7 @@ | |||||||
| // | // | ||||||
| // ThreadTest.cpp | // ThreadTest.cpp | ||||||
| // | // | ||||||
| // $Id: //poco/Main/Foundation/testsuite/src/ThreadTest.cpp#9 $ | // $Id: //poco/Main/Foundation/testsuite/src/ThreadTest.cpp#10 $ | ||||||
| // | // | ||||||
| // Copyright (c) 2004-2006, Applied Informatics Software Engineering GmbH. | // Copyright (c) 2004-2006, Applied Informatics Software Engineering GmbH. | ||||||
| // and Contributors. | // and Contributors. | ||||||
| @@ -180,6 +180,21 @@ void ThreadTest::testThreads() | |||||||
| } | } | ||||||
|  |  | ||||||
|  |  | ||||||
|  | void ThreadTest::testJoin() | ||||||
|  | { | ||||||
|  | 	Thread thread; | ||||||
|  | 	MyRunnable r; | ||||||
|  | 	assert (!thread.isRunning()); | ||||||
|  | 	thread.start(r); | ||||||
|  | 	Thread::sleep(200); | ||||||
|  | 	assert (thread.isRunning()); | ||||||
|  | 	assert (!thread.tryJoin(100)); | ||||||
|  | 	r.notify(); | ||||||
|  | 	assert (thread.tryJoin(500)); | ||||||
|  | 	assert (!thread.isRunning()); | ||||||
|  | } | ||||||
|  |  | ||||||
|  |  | ||||||
| void ThreadTest::setUp() | void ThreadTest::setUp() | ||||||
| { | { | ||||||
| } | } | ||||||
| @@ -198,6 +213,7 @@ CppUnit::Test* ThreadTest::suite() | |||||||
| 	CppUnit_addTest(pSuite, ThreadTest, testNamedThread); | 	CppUnit_addTest(pSuite, ThreadTest, testNamedThread); | ||||||
| 	CppUnit_addTest(pSuite, ThreadTest, testCurrent); | 	CppUnit_addTest(pSuite, ThreadTest, testCurrent); | ||||||
| 	CppUnit_addTest(pSuite, ThreadTest, testThreads); | 	CppUnit_addTest(pSuite, ThreadTest, testThreads); | ||||||
|  | 	CppUnit_addTest(pSuite, ThreadTest, testJoin); | ||||||
|  |  | ||||||
| 	return pSuite; | 	return pSuite; | ||||||
| } | } | ||||||
|   | |||||||
| @@ -1,7 +1,7 @@ | |||||||
| // | // | ||||||
| // ThreadTest.h | // ThreadTest.h | ||||||
| // | // | ||||||
| // $Id: //poco/Main/Foundation/testsuite/src/ThreadTest.h#8 $ | // $Id: //poco/Main/Foundation/testsuite/src/ThreadTest.h#9 $ | ||||||
| // | // | ||||||
| // Definition of the ThreadTest class. | // Definition of the ThreadTest class. | ||||||
| // | // | ||||||
| @@ -50,6 +50,7 @@ public: | |||||||
| 	void testNamedThread(); | 	void testNamedThread(); | ||||||
| 	void testCurrent(); | 	void testCurrent(); | ||||||
| 	void testThreads(); | 	void testThreads(); | ||||||
|  | 	void testJoin(); | ||||||
|  |  | ||||||
| 	void setUp(); | 	void setUp(); | ||||||
| 	void tearDown(); | 	void tearDown(); | ||||||
|   | |||||||
| @@ -1,7 +1,7 @@ | |||||||
| // | // | ||||||
| // ThreadingTestSuite.cpp | // ThreadingTestSuite.cpp | ||||||
| // | // | ||||||
| // $Id: //poco/Main/Foundation/testsuite/src/ThreadingTestSuite.cpp#9 $ | // $Id: //poco/Main/Foundation/testsuite/src/ThreadingTestSuite.cpp#10 $ | ||||||
| // | // | ||||||
| // Copyright (c) 2004-2006, Applied Informatics Software Engineering GmbH. | // Copyright (c) 2004-2006, Applied Informatics Software Engineering GmbH. | ||||||
| // and Contributors. | // and Contributors. | ||||||
| @@ -40,6 +40,7 @@ | |||||||
| #include "ActivityTest.h" | #include "ActivityTest.h" | ||||||
| #include "ActiveMethodTest.h" | #include "ActiveMethodTest.h" | ||||||
| #include "ActiveDispatcherTest.h" | #include "ActiveDispatcherTest.h" | ||||||
|  | #include "ConditionTest.h" | ||||||
|  |  | ||||||
|  |  | ||||||
| CppUnit::Test* ThreadingTestSuite::suite() | CppUnit::Test* ThreadingTestSuite::suite() | ||||||
| @@ -55,6 +56,7 @@ CppUnit::Test* ThreadingTestSuite::suite() | |||||||
| 	pSuite->addTest(ActivityTest::suite()); | 	pSuite->addTest(ActivityTest::suite()); | ||||||
| 	pSuite->addTest(ActiveMethodTest::suite()); | 	pSuite->addTest(ActiveMethodTest::suite()); | ||||||
| 	pSuite->addTest(ActiveDispatcherTest::suite()); | 	pSuite->addTest(ActiveDispatcherTest::suite()); | ||||||
|  | 	pSuite->addTest(ConditionTest::suite()); | ||||||
|  |  | ||||||
| 	return pSuite; | 	return pSuite; | ||||||
| } | } | ||||||
|   | |||||||
| @@ -1,13 +1,13 @@ | |||||||
| // | // | ||||||
| // ParserEngine.cpp | // ParserEngine.cpp | ||||||
| // | // | ||||||
| // $Id: //poco/Main/XML/src/ParserEngine.cpp#12 $ | // $Id: //poco/Main/XML/src/ParserEngine.cpp#13 $ | ||||||
| // | // | ||||||
| // Library: XML | // Library: XML | ||||||
| // Package: XML | // Package: XML | ||||||
| // Module:  ParserEngine | // Module:  ParserEngine | ||||||
| // | // | ||||||
| // Copyright (c) 2004-2006, Applied Informatics Software Engineering GmbH. | // Copyright (c) 2004-2007, Applied Informatics Software Engineering GmbH. | ||||||
| // and Contributors. | // and Contributors. | ||||||
| // | // | ||||||
| // Permission is hereby granted, free of charge, to any person or organization | // Permission is hereby granted, free of charge, to any person or organization | ||||||
| @@ -699,14 +699,21 @@ int ParserEngine::handleUnknownEncoding(void* encodingHandlerData, const XML_Cha | |||||||
| 	ParserEngine* pThis = reinterpret_cast<ParserEngine*>(encodingHandlerData); | 	ParserEngine* pThis = reinterpret_cast<ParserEngine*>(encodingHandlerData); | ||||||
| 	 | 	 | ||||||
| 	XMLString encoding(name); | 	XMLString encoding(name); | ||||||
|  | 	TextEncoding* knownEncoding = 0; | ||||||
|  |  | ||||||
| 	EncodingMap::const_iterator it = pThis->_encodings.find(encoding); | 	EncodingMap::const_iterator it = pThis->_encodings.find(encoding); | ||||||
| 	if (it != pThis->_encodings.end()) | 	if (it != pThis->_encodings.end()) | ||||||
|  | 		knownEncoding = it->second; | ||||||
|  | 	else | ||||||
|  | 		knownEncoding = Poco::TextEncoding::find(encoding); | ||||||
|  |  | ||||||
|  | 	if (knownEncoding) | ||||||
| 	{ | 	{ | ||||||
| 		const TextEncoding::CharacterMap& map = it->second->characterMap(); | 		const TextEncoding::CharacterMap& map = knownEncoding->characterMap(); | ||||||
| 		for (int i = 0; i < 256; ++i) | 		for (int i = 0; i < 256; ++i) | ||||||
| 			info->map[i] = map[i]; | 			info->map[i] = map[i]; | ||||||
| 			 | 			 | ||||||
| 		info->data    = it->second; | 		info->data    = knownEncoding; | ||||||
| 		info->convert = &ParserEngine::convert; | 		info->convert = &ParserEngine::convert; | ||||||
| 		info->release = 0; | 		info->release = 0; | ||||||
| 		return XML_STATUS_OK; | 		return XML_STATUS_OK; | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 Guenter Obiltschnig
					Guenter Obiltschnig