Merge branch 'poco-1.10.0' into devel

This commit is contained in:
Günter Obiltschnig
2020-01-25 15:16:51 +01:00
18 changed files with 95 additions and 67 deletions

View File

@@ -4,6 +4,9 @@ Release 1.10.0 (2020-01-xx)
========================== ==========================
- This release now requires a C++14 compiler (GCC 5, Clang 3.4, Visual C++ 2015). - This release now requires a C++14 compiler (GCC 5, Clang 3.4, Visual C++ 2015).
- Visual Studio project and solution files for versions prior to 2015 have
been removed. Furthermore, the separate projects and solutions for 64-bit builds
have been removed and configurations have been merged in a single project file.
- POCO's fixed-size integer types are now based on <cstdint> types. This changes - POCO's fixed-size integer types are now based on <cstdint> types. This changes
the definition of Poco::Int64 and Poco::UInt64 on some platforms. the definition of Poco::Int64 and Poco::UInt64 on some platforms.
- Many methods exposing raw pointers have been changed to use smart pointers - Many methods exposing raw pointers have been changed to use smart pointers
@@ -86,6 +89,7 @@ Release 1.10.0 (2020-01-xx)
- GH #2408: add ordered containers - GH #2408: add ordered containers
- GH #2042: Android abstract namespace local socket address - GH #2042: Android abstract namespace local socket address
- GH #2088: Fix race condition in TCPServerDispatcher.cpp - GH #2088: Fix race condition in TCPServerDispatcher.cpp
- GH #2892: SocketImpl::bind --> bind wrong config
Release 1.9.4 (2019-09-18) Release 1.9.4 (2019-09-18)

View File

@@ -70,7 +70,7 @@ std::string Foundation_API format(const std::string& fmt, const Any& value);
/// * - left align the result within the given field width /// * - left align the result within the given field width
/// * + prefix the output value with a sign (+ or -) if the output value is of a signed type /// * + prefix the output value with a sign (+ or -) if the output value is of a signed type
/// * 0 if width is prefixed with 0, zeros are added until the minimum width is reached /// * 0 if width is prefixed with 0, zeros are added until the minimum width is reached
/// * # For o, x, X, the # flag prefixes any nonzero output value with 0, 0x, or 0X, respectively; /// * # For o, x, X, the # flag prefixes any nonzero output value with 0, 0x, or 0X, respectively;
/// for e, E, f, the # flag forces the output value to contain a decimal point in all cases. /// for e, E, f, the # flag forces the output value to contain a decimal point in all cases.
/// ///
/// The following modifiers are supported: /// The following modifiers are supported:
@@ -93,9 +93,9 @@ std::string Foundation_API format(const std::string& fmt, const Any& value);
/// Throws an InvalidArgumentException if an argument index is out of range. /// Throws an InvalidArgumentException if an argument index is out of range.
/// ///
/// Starting with release 1.4.3, an argument that does not match the format /// Starting with release 1.4.3, an argument that does not match the format
/// specifier no longer results in a BadCastException. The string [ERRFMT] is /// specifier no longer results in a BadCastException. The string [ERRFMT] is
/// written to the result string instead. /// written to the result string instead.
/// ///
/// If there are more format specifiers than values, the format specifiers without a corresponding value /// If there are more format specifiers than values, the format specifiers without a corresponding value
/// are copied verbatim to output. /// are copied verbatim to output.
/// ///
@@ -115,9 +115,9 @@ void Foundation_API format(std::string& result, const std::string& fmt, const st
template < template <
typename T, typename T,
typename... Args> typename... Args>
void format(std::string &result, const std::string &fmt, T arg1, Args... args) void format(std::string& result, const std::string& fmt, T arg1, Args... args)
/// Appends the formatted string to result. /// Appends the formatted string to result.
{ {
std::vector<Any> values; std::vector<Any> values;
@@ -126,14 +126,42 @@ void format(std::string &result, const std::string &fmt, T arg1, Args... args)
values.insert(values.end(), { args... }); values.insert(values.end(), { args... });
format(result, fmt, values); format(result, fmt, values);
} }
template < template <
typename FMT, typename T,
typename T, typename... Args>
typename... Args, void format(std::string& result, const char* fmt, T arg1, Args... args)
typename std::enable_if<std::is_const<typename std::remove_reference<FMT>::type>::value, int>::type = 0> /// Appends the formatted string to result.
std::string format(FMT &fmt, T arg1, Args... args) {
std::vector<Any> values;
values.reserve(sizeof...(Args) + 1);
values.emplace_back(arg1);
values.insert(values.end(), { args... });
format(result, fmt, values);
}
template <
typename T,
typename... Args>
std::string format(const std::string& fmt, T arg1, Args... args)
/// Returns the formatted string.
{
std::vector<Any> values;
values.reserve(sizeof...(Args) + 1);
values.emplace_back(arg1);
values.insert(values.end(), { args... });
std::string result;
format(result, fmt, values);
return result;
}
template <
typename T,
typename... Args>
std::string format(const char* fmt, T arg1, Args... args)
/// Returns the formatted string. /// Returns the formatted string.
{ {
std::vector<Any> values; std::vector<Any> values;

View File

@@ -31,7 +31,7 @@ class MongoDB_API Array: public Document
/// This class represents a BSON Array. /// This class represents a BSON Array.
{ {
public: public:
typedef SharedPtr<Array> Ptr; using Ptr = SharedPtr<Array>;
Array(); Array();
/// Creates an empty Array. /// Creates an empty Array.

View File

@@ -38,7 +38,7 @@ class MongoDB_API Binary
/// A Binary stores its data in a Poco::Buffer<unsigned char>. /// A Binary stores its data in a Poco::Buffer<unsigned char>.
{ {
public: public:
typedef SharedPtr<Binary> Ptr; using Ptr = SharedPtr<Binary>;
Binary(); Binary();
/// Creates an empty Binary with subtype 0. /// Creates an empty Binary with subtype 0.
@@ -48,12 +48,12 @@ public:
Binary(const UUID& uuid); Binary(const UUID& uuid);
/// Creates a Binary containing an UUID. /// Creates a Binary containing an UUID.
Binary(const std::string& data, unsigned char subtype = 0); Binary(const std::string& data, unsigned char subtype = 0);
/// Creates a Binary with the contents of the given string and the given subtype. /// Creates a Binary with the contents of the given string and the given subtype.
Binary(const void* data, Poco::Int32 size, unsigned char subtype = 0); Binary(const void* data, Poco::Int32 size, unsigned char subtype = 0);
/// Creates a Binary with the contents of the given buffer and the given subtype. /// Creates a Binary with the contents of the given buffer and the given subtype.
virtual ~Binary(); virtual ~Binary();
/// Destroys the Binary. /// Destroys the Binary.
@@ -69,7 +69,7 @@ public:
std::string toString(int indent = 0) const; std::string toString(int indent = 0) const;
/// Returns the contents of the Binary as Base64-encoded string. /// Returns the contents of the Binary as Base64-encoded string.
std::string toRawString() const; std::string toRawString() const;
/// Returns the raw content of the Binary as a string. /// Returns the raw content of the Binary as a string.
@@ -135,7 +135,7 @@ inline void BSONReader::read<Binary::Ptr>(Binary::Ptr& to)
unsigned char subtype; unsigned char subtype;
_reader >> subtype; _reader >> subtype;
to->subtype(subtype); to->subtype(subtype);
_reader.readRaw((char*) to->buffer().begin(), size); _reader.readRaw((char*) to->buffer().begin(), size);
} }

View File

@@ -37,7 +37,7 @@ class MongoDB_API Connection
/// for more information on the wire protocol. /// for more information on the wire protocol.
{ {
public: public:
typedef Poco::SharedPtr<Connection> Ptr; using Ptr = Poco::SharedPtr<Connection>;
class MongoDB_API SocketFactory class MongoDB_API SocketFactory
{ {

View File

@@ -33,7 +33,7 @@ namespace MongoDB {
class ElementFindByName class ElementFindByName
{ {
public: public:
ElementFindByName(const std::string& name): ElementFindByName(const std::string& name):
_name(name) _name(name)
{ {
} }
@@ -52,8 +52,8 @@ class MongoDB_API Document
/// Represents a MongoDB (BSON) document. /// Represents a MongoDB (BSON) document.
{ {
public: public:
typedef SharedPtr<Document> Ptr; using Ptr = SharedPtr<Document>;
typedef std::vector<Document::Ptr> Vector; using Vector = std::vector<Document::Ptr>;
Document(); Document();
/// Creates an empty Document. /// Creates an empty Document.

View File

@@ -43,7 +43,7 @@ class MongoDB_API Element
/// Represents an Element of a Document or an Array. /// Represents an Element of a Document or an Array.
{ {
public: public:
typedef Poco::SharedPtr<Element> Ptr; using Ptr = Poco::SharedPtr<Element>;
explicit Element(const std::string& name); explicit Element(const std::string& name);
/// Creates the Element with the given name. /// Creates the Element with the given name.
@@ -78,10 +78,10 @@ inline const std::string& Element::name() const
} }
typedef std::list<Element::Ptr> ElementSet; using ElementSet = std::list<Element::Ptr>;
template<typename T> template<typename T>
struct ElementTraits struct ElementTraits
{ {
}; };
@@ -259,7 +259,7 @@ inline void BSONWriter::write<Timestamp>(Timestamp& from)
} }
typedef Nullable<unsigned char> NullValue; using NullValue = Nullable<unsigned char>;
// BSON Null Value // BSON Null Value
@@ -288,7 +288,7 @@ inline void BSONWriter::write<NullValue>(NullValue& from)
} }
struct BSONTimestamp struct BSONTimestamp
{ {
Poco::Timestamp ts; Poco::Timestamp ts;
Poco::Int32 inc; Poco::Int32 inc;
@@ -355,7 +355,7 @@ class ConcreteElement: public Element
{ {
public: public:
ConcreteElement(const std::string& name, const T& init): ConcreteElement(const std::string& name, const T& init):
Element(name), Element(name),
_value(init) _value(init)
{ {
} }
@@ -364,7 +364,7 @@ public:
{ {
} }
T value() const T value() const
{ {
return _value; return _value;
@@ -376,7 +376,7 @@ public:
return ElementTraits<T>::toString(_value, indent); return ElementTraits<T>::toString(_value, indent);
} }
int type() const int type() const
{ {
return ElementTraits<T>::TypeId; return ElementTraits<T>::TypeId;

View File

@@ -33,7 +33,7 @@ class MongoDB_API JavaScriptCode
/// Represents JavaScript type in BSON. /// Represents JavaScript type in BSON.
{ {
public: public:
typedef SharedPtr<JavaScriptCode> Ptr; using Ptr = SharedPtr<JavaScriptCode>;
JavaScriptCode(); JavaScriptCode();
/// Creates an empty JavaScriptCode object. /// Creates an empty JavaScriptCode object.

View File

@@ -42,10 +42,10 @@ class MongoDB_API ObjectId
/// as its value. /// as its value.
{ {
public: public:
typedef SharedPtr<ObjectId> Ptr; using Ptr = SharedPtr<ObjectId>;
explicit ObjectId(const std::string& id); explicit ObjectId(const std::string& id);
/// Creates an ObjectId from a string. /// Creates an ObjectId from a string.
/// ///
/// The string must contain a hexadecimal representation /// The string must contain a hexadecimal representation
/// of an object ID. This means a string of 24 characters. /// of an object ID. This means a string of 24 characters.
@@ -61,15 +61,15 @@ public:
std::string toString(const std::string& fmt = "%02x") const; std::string toString(const std::string& fmt = "%02x") const;
/// Returns the id in string format. The fmt parameter /// Returns the id in string format. The fmt parameter
/// specifies the formatting used for individual members /// specifies the formatting used for individual members
/// of the ID char array. /// of the ID char array.
private: private:
ObjectId(); ObjectId();
static int fromHex(char c); static int fromHex(char c);
static char fromHex(const char* c); static char fromHex(const char* c);
unsigned char _id[12]; unsigned char _id[12];
friend class BSONWriter; friend class BSONWriter;

View File

@@ -31,7 +31,7 @@ class MongoDB_API RegularExpression
/// Represents a regular expression in BSON format. /// Represents a regular expression in BSON format.
{ {
public: public:
typedef SharedPtr<RegularExpression> Ptr; using Ptr = SharedPtr<RegularExpression>;
RegularExpression(); RegularExpression();
/// Creates an empty RegularExpression. /// Creates an empty RegularExpression.

View File

@@ -229,7 +229,7 @@ void SocketImpl::bind(const SocketAddress& address, bool reuseAddress, bool reus
void SocketImpl::bind6(const SocketAddress& address, bool reuseAddress, bool ipV6Only) void SocketImpl::bind6(const SocketAddress& address, bool reuseAddress, bool ipV6Only)
{ {
bind6(address, reuseAddress, true, ipV6Only); bind6(address, reuseAddress, reuseAddress, ipV6Only);
} }

View File

@@ -278,14 +278,6 @@ protected:
Environment::set("PATH", path); Environment::set("PATH", path);
} }
logger().debug("exec " + exec);
logger().debug("path " + path);
for (int no = 0; no < args.size(); ++no)
{
logger().debug("arg " + args[no]);
}
if (usePipe) if (usePipe)
{ {
Poco::Pipe inPipe; Poco::Pipe inPipe;

View File

@@ -35,7 +35,7 @@ class Redis_API Array
/// value. /// value.
{ {
public: public:
typedef std::vector<RedisType::Ptr>::const_iterator const_iterator; using const_iterator = std::vector<RedisType::Ptr>::const_iterator;
Array(); Array();
/// Creates an Array. As long as there are no elements added, /// Creates an Array. As long as there are no elements added,
@@ -99,7 +99,7 @@ public:
/// Adds a simple string (can't contain newline characters!). /// Adds a simple string (can't contain newline characters!).
const_iterator begin() const; const_iterator begin() const;
/// Returns an iterator to the start of the array. /// Returns an iterator to the start of the array.
/// ///
/// Note: this can throw a NullValueException when this is a Null array. /// Note: this can throw a NullValueException when this is a Null array.
@@ -107,7 +107,7 @@ public:
/// Removes all elements from the array. /// Removes all elements from the array.
const_iterator end() const; const_iterator end() const;
/// Returns an iterator to the end of the array. /// Returns an iterator to the end of the array.
/// ///
/// Note: this can throw a NullValueException when this is a Null array. /// Note: this can throw a NullValueException when this is a Null array.
@@ -149,7 +149,7 @@ public:
/// Redis Protocol specification. /// Redis Protocol specification.
size_t size() const; size_t size() const;
/// Returns the size of the array. /// Returns the size of the array.
/// ///
/// Note: this can throw a NullValueException when this is a Null array. /// Note: this can throw a NullValueException when this is a Null array.
@@ -157,7 +157,7 @@ private:
void checkNull(); void checkNull();
/// Checks for null array and sets a new vector if true. /// Checks for null array and sets a new vector if true.
Nullable<std::vector<RedisType::Ptr> > _elements; Nullable<std::vector<RedisType::Ptr>> _elements;
}; };

View File

@@ -37,7 +37,7 @@ class Redis_API Client
/// bit integer, a simple string, a bulk string, an array or an error. The /// bit integer, a simple string, a bulk string, an array or an error. The
/// first element of the command array is the Redis command. A simple string /// first element of the command array is the Redis command. A simple string
/// is a string that cannot contain a CR or LF character. A bulk string is /// is a string that cannot contain a CR or LF character. A bulk string is
/// implemented as a typedef for Poco::Nullable<std::string>. This is /// implemented as an alias for Poco::Nullable<std::string>. This is
/// because a bulk string can represent a Null value. /// because a bulk string can represent a Null value.
/// ///
/// BulkString bs = client.execute<BulkString>(...); /// BulkString bs = client.execute<BulkString>(...);
@@ -71,7 +71,7 @@ class Redis_API Client
/// command << "list"; /// command << "list";
{ {
public: public:
typedef SharedPtr<Client> Ptr; using Ptr = SharedPtr<Client>;
Client(); Client();
/// Creates an unconnected Client. /// Creates an unconnected Client.

View File

@@ -49,7 +49,7 @@ class Redis_API Command: public Array
/// ///
{ {
public: public:
typedef std::vector<std::string> StringVec; using StringVec = std::vector<std::string>;
Command(const std::string& command); Command(const std::string& command);
/// Creates a command. /// Creates a command.

View File

@@ -36,7 +36,7 @@ class Redis_API RedisType
/// element with different types in Array. /// element with different types in Array.
{ {
public: public:
enum Types enum Types
{ {
REDIS_INTEGER, /// Redis Integer REDIS_INTEGER, /// Redis Integer
REDIS_SIMPLE_STRING, /// Redis Simple String REDIS_SIMPLE_STRING, /// Redis Simple String
@@ -45,7 +45,7 @@ public:
REDIS_ERROR /// Redis Error REDIS_ERROR /// Redis Error
}; };
typedef SharedPtr<RedisType> Ptr; using Ptr = SharedPtr<RedisType>;
RedisType(); RedisType();
/// Creates the RedisType. /// Creates the RedisType.
@@ -132,9 +132,9 @@ struct RedisTypeTraits
template<> template<>
struct RedisTypeTraits<Int64> struct RedisTypeTraits<Int64>
{ {
enum enum
{ {
TypeId = RedisType::REDIS_INTEGER TypeId = RedisType::REDIS_INTEGER
}; };
static const char marker = ':'; static const char marker = ':';
@@ -155,9 +155,9 @@ struct RedisTypeTraits<Int64>
template<> template<>
struct RedisTypeTraits<std::string> struct RedisTypeTraits<std::string>
{ {
enum enum
{ {
TypeId = RedisType::REDIS_SIMPLE_STRING TypeId = RedisType::REDIS_SIMPLE_STRING
}; };
static const char marker = '+'; static const char marker = '+';
@@ -174,17 +174,17 @@ struct RedisTypeTraits<std::string>
}; };
typedef Nullable<std::string> BulkString; using BulkString = Nullable<std::string>;
/// A bulk string is a string that can contain a NULL value. /// A bulk string is a string that can contain a NULL value.
/// So, BulkString is a typedef for Nullable<std::string>. /// So, BulkString is an alias for Nullable<std::string>.
template<> template<>
struct RedisTypeTraits<BulkString> struct RedisTypeTraits<BulkString>
{ {
enum enum
{ {
TypeId = RedisType::REDIS_BULK_STRING TypeId = RedisType::REDIS_BULK_STRING
}; };
static const char marker = '$'; static const char marker = '$';

View File

@@ -53,7 +53,7 @@ SHAREDLIBLINKEXT = .dylib
# Compiler and Linker Flags # Compiler and Linker Flags
# #
CFLAGS = $(ARCHFLAGS) $(OSFLAGS) -std=c99 CFLAGS = $(ARCHFLAGS) $(OSFLAGS) -std=c99
CXXFLAGS = $(ARCHFLAGS) $(OSFLAGS) -std=c++11 -stdlib=libc++ -Wall -Wno-sign-compare -Wno-unused-variable -Wno-unused-function -Wno-unneeded-internal-declaration CXXFLAGS = $(ARCHFLAGS) $(OSFLAGS) -std=c++14 -stdlib=libc++ -Wall -Wno-sign-compare -Wno-unused-variable -Wno-unused-function -Wno-unneeded-internal-declaration
LINKFLAGS = $(ARCHFLAGS) $(OSFLAGS) -stdlib=libc++ LINKFLAGS = $(ARCHFLAGS) $(OSFLAGS) -stdlib=libc++
SHLIBFLAGS = $(ARCHFLAGS) $(OSFLAGS) -stdlib=libc++ SHLIBFLAGS = $(ARCHFLAGS) $(OSFLAGS) -stdlib=libc++
DYLIBFLAGS = $(ARCHFLAGS) $(OSFLAGS) -stdlib=libc++ DYLIBFLAGS = $(ARCHFLAGS) $(OSFLAGS) -stdlib=libc++

View File

@@ -6,6 +6,9 @@ AAAIntroduction
!!Summary of Changes !!Summary of Changes
- This release now requires a C++14 compiler (GCC 5, Clang 3.4, Visual C++ 2015). - This release now requires a C++14 compiler (GCC 5, Clang 3.4, Visual C++ 2015).
- Visual Studio project and solution files for versions prior to 2015 have
been removed. Furthermore, the separate projects and solutions for 64-bit builds
have been removed and configurations have been merged in a single project file.
- POCO's fixed-size integer types are now based on <cstdint> types. This changes - POCO's fixed-size integer types are now based on <cstdint> types. This changes
the definition of Poco::Int64 and Poco::UInt64 on some platforms. the definition of Poco::Int64 and Poco::UInt64 on some platforms.
- Many methods exposing raw pointers have been changed to use smart pointers - Many methods exposing raw pointers have been changed to use smart pointers
@@ -88,6 +91,7 @@ AAAIntroduction
- GH #2408: add ordered containers - GH #2408: add ordered containers
- GH #2042: Android abstract namespace local socket address - GH #2042: Android abstract namespace local socket address
- GH #2088: Fix race condition in TCPServerDispatcher.cpp - GH #2088: Fix race condition in TCPServerDispatcher.cpp
- GH #2892: SocketImpl::bind --> bind wrong config
!!Incompatible Changes and Possible Transition Issues !!Incompatible Changes and Possible Transition Issues