public inbox for gentoo-commits@lists.gentoo.org
 help / color / mirror / Atom feed
* [gentoo-commits] repo/proj/guru:dev commit in: dev-cpp/cpprestsdk/, dev-cpp/cpprestsdk/files/
@ 2023-12-14 20:33 Jan-Espen Oversand
  0 siblings, 0 replies; 6+ messages in thread
From: Jan-Espen Oversand @ 2023-12-14 20:33 UTC (permalink / raw
  To: gentoo-commits

commit:     4b2d9697bf3aee5c6dd0bec2c379131106cdc394
Author:     Jan-Espen Oversand <sigsegv <AT> radiotube <DOT> org>
AuthorDate: Thu Dec 14 20:31:13 2023 +0000
Commit:     Jan-Espen Oversand <sigsegv <AT> radiotube <DOT> org>
CommitDate: Thu Dec 14 20:31:38 2023 +0000
URL:        https://gitweb.gentoo.org/repo/proj/guru.git/commit/?id=4b2d9697

dev-cpp/cpprestsdk: new package, add 2.10.19

Signed-off-by: Jan-Espen Oversand <sigsegv <AT> radiotube.org>

 dev-cpp/cpprestsdk/Manifest                        |  1 +
 dev-cpp/cpprestsdk/cpprestsdk-2.10.19.ebuild       | 46 ++++++++++++++++++++++
 .../files/cpprestsdk-2.10.19-warnings.patch        | 11 ++++++
 dev-cpp/cpprestsdk/metadata.xml                    | 22 +++++++++++
 4 files changed, 80 insertions(+)

diff --git a/dev-cpp/cpprestsdk/Manifest b/dev-cpp/cpprestsdk/Manifest
new file mode 100644
index 0000000000..625524b0cd
--- /dev/null
+++ b/dev-cpp/cpprestsdk/Manifest
@@ -0,0 +1 @@
+DIST cpprestsdk-2.10.19.tar.gz 1749647 BLAKE2B 4f6863c490df083c39e7e4fdb714ca380b1f28636bb8c446e9627bb31259160d2d30f00fb474caffb0d06f0d7f8c86db3f6eac959bfa738318dfabf52def8339 SHA512 2d8fa213f492236e2fd912349bf81951c1e618dd8eab4f665f909d75b5aeeda18b8f70dce3a4db50d67bdb3e372888132481701163de6c27716dfd750bff9781

diff --git a/dev-cpp/cpprestsdk/cpprestsdk-2.10.19.ebuild b/dev-cpp/cpprestsdk/cpprestsdk-2.10.19.ebuild
new file mode 100644
index 0000000000..2024e804e2
--- /dev/null
+++ b/dev-cpp/cpprestsdk/cpprestsdk-2.10.19.ebuild
@@ -0,0 +1,46 @@
+# Copyright 1999-2023 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit cmake
+
+DESCRIPTION="A Microsoft project for cloud-based client-server communication."
+HOMEPAGE="https://github.com/microsoft/cpprestsdk"
+SRC_URI="https://github.com/microsoft/cpprestsdk/archive/refs/tags/v${PV}.tar.gz -> ${P}.tar.gz"
+LICENSE="MIT"
+SLOT="0"
+KEYWORDS="~amd64"
+
+RDEPEND=">=dev-libs/openssl-1.1.1q
+		>=dev-libs/boost-1.80.0-r1
+		>=sys-libs/zlib-1.2.13-r1"
+
+DEPEND="${RDEPEND}"
+
+BDEPEND=">=dev-util/cmake-3.23
+		>=dev-util/ninja-1.11.1-r2
+		>=sys-devel/gcc-11.3.0
+		>=virtual/pkgconfig-2-r1
+		>=dev-cpp/websocketpp-0.8.2"
+
+PATCHES=(
+	"${FILESDIR}"/cpprestsdk-${PV}-warnings.patch
+)
+
+src_prepare(){
+	cmake_src_prepare
+}
+
+src_configure() {
+	local mycmakeargs=( -DCMAKE_BUILD_TYPE=Release )
+	cmake_src_configure
+}
+
+src_compile(){
+	cmake_src_compile
+}
+
+src_install(){
+	cmake_src_install
+}

diff --git a/dev-cpp/cpprestsdk/files/cpprestsdk-2.10.19-warnings.patch b/dev-cpp/cpprestsdk/files/cpprestsdk-2.10.19-warnings.patch
new file mode 100644
index 0000000000..dc663ec0c7
--- /dev/null
+++ b/dev-cpp/cpprestsdk/files/cpprestsdk-2.10.19-warnings.patch
@@ -0,0 +1,11 @@
+--- a/Release/src/http/common/http_helpers.cpp	2021-02-02 05:03:00.000000000 +0100
++++ b/Release/src/http/common/http_helpers.cpp	2022-12-08 08:42:47.321677974 +0100
+@@ -84,7 +84,7 @@
+     }
+     else
+     {
+-        char buffer[9];
++        char buffer[17];
+ #ifdef _WIN32
+         sprintf_s(buffer, sizeof(buffer), "%8IX", bytes_read);
+ #else

diff --git a/dev-cpp/cpprestsdk/metadata.xml b/dev-cpp/cpprestsdk/metadata.xml
new file mode 100644
index 0000000000..00e1a920aa
--- /dev/null
+++ b/dev-cpp/cpprestsdk/metadata.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://www.gentoo.org/dtd/metadata.dtd">
+<!--
+  This is the example metadata file.
+  The root element of this file is <pkgmetadata>. Within this element a
+  number of subelements are allowed, the most common being maintainer.
+
+  For a full description look at:
+  https://devmanual.gentoo.org/ebuild-writing/misc-files/metadata/
+
+  Before committing, please remove the comments from this file. They are
+  not relevant for general metadata.xml files.
+-->
+<pkgmetadata>
+  <maintainer type="person">
+    <email>sigsegv@radiotube.org</email>
+    <description>Jan-Espen Oversand</description>
+  </maintainer>
+  <upstream>
+    <remote-id type="github">microsoft/cpprestsdk</remote-id>
+  </upstream>
+</pkgmetadata>


^ permalink raw reply related	[flat|nested] 6+ messages in thread

* [gentoo-commits] repo/proj/guru:dev commit in: dev-cpp/cpprestsdk/, dev-cpp/cpprestsdk/files/
@ 2023-12-15 20:49 Jan-Espen Oversand
  0 siblings, 0 replies; 6+ messages in thread
From: Jan-Espen Oversand @ 2023-12-15 20:49 UTC (permalink / raw
  To: gentoo-commits

commit:     e4cc5a8427e5d028114a5aad19365b546ad95571
Author:     Jan-Espen Oversand <sigsegv <AT> radiotube <DOT> org>
AuthorDate: Fri Dec 15 20:48:24 2023 +0000
Commit:     Jan-Espen Oversand <sigsegv <AT> radiotube <DOT> org>
CommitDate: Fri Dec 15 20:49:19 2023 +0000
URL:        https://gitweb.gentoo.org/repo/proj/guru.git/commit/?id=e4cc5a84

dev-cpp/cpprestsdk: disable failing tests

Bug: https://bugs.gentoo.org/920028
Closes: https://bugs.gentoo.org/920028
Signed-off-by: Jan-Espen Oversand <sigsegv <AT> radiotube.org>

 ...2.10.19.ebuild => cpprestsdk-2.10.19-r1.ebuild} | 12 +----------
 .../cpprestsdk-2.10.19-disabl-int-tests.patch      | 24 ++++++++++++++++++++++
 2 files changed, 25 insertions(+), 11 deletions(-)

diff --git a/dev-cpp/cpprestsdk/cpprestsdk-2.10.19.ebuild b/dev-cpp/cpprestsdk/cpprestsdk-2.10.19-r1.ebuild
similarity index 88%
rename from dev-cpp/cpprestsdk/cpprestsdk-2.10.19.ebuild
rename to dev-cpp/cpprestsdk/cpprestsdk-2.10.19-r1.ebuild
index 2024e804e2..97aea7c69e 100644
--- a/dev-cpp/cpprestsdk/cpprestsdk-2.10.19.ebuild
+++ b/dev-cpp/cpprestsdk/cpprestsdk-2.10.19-r1.ebuild
@@ -26,21 +26,11 @@ BDEPEND=">=dev-util/cmake-3.23
 
 PATCHES=(
 	"${FILESDIR}"/cpprestsdk-${PV}-warnings.patch
+	"${FILESDIR}"/cpprestsdk-${PV}-disabl-int-tests.patch
 )
 
-src_prepare(){
-	cmake_src_prepare
-}
-
 src_configure() {
 	local mycmakeargs=( -DCMAKE_BUILD_TYPE=Release )
 	cmake_src_configure
 }
 
-src_compile(){
-	cmake_src_compile
-}
-
-src_install(){
-	cmake_src_install
-}

diff --git a/dev-cpp/cpprestsdk/files/cpprestsdk-2.10.19-disabl-int-tests.patch b/dev-cpp/cpprestsdk/files/cpprestsdk-2.10.19-disabl-int-tests.patch
new file mode 100644
index 0000000000..25a95cc9c5
--- /dev/null
+++ b/dev-cpp/cpprestsdk/files/cpprestsdk-2.10.19-disabl-int-tests.patch
@@ -0,0 +1,24 @@
+--- a/Release/tests/functional/http/CMakeLists.txt
++++ b/Release/tests/functional/http/CMakeLists.txt
+@@ -1,3 +1,3 @@
+ add_subdirectory(utilities)
+-add_subdirectory(client)
++#add_subdirectory(client)
+ add_subdirectory(listener)
+--- a/Release/tests/functional/websockets/CMakeLists.txt
++++ b/Release/tests/functional/websockets/CMakeLists.txt
+@@ -27,9 +27,9 @@ if (NOT CPPREST_EXCLUDE_WEBSOCKETS)
+     client/stdafx.cpp
+   )
+ 
+-  add_casablanca_test(websocketsclient_test SOURCES)
+-  if(NOT TEST_LIBRARY_TARGET_TYPE STREQUAL "OBJECT")
+-    target_link_libraries(websocketsclient_test PRIVATE websockettest_utilities)
+-  endif()
+-  target_include_directories(websocketsclient_test PRIVATE utilities)
++#  add_casablanca_test(websocketsclient_test SOURCES)
++#  if(NOT TEST_LIBRARY_TARGET_TYPE STREQUAL "OBJECT")
++#    target_link_libraries(websocketsclient_test PRIVATE websockettest_utilities)
++#  endif()
++#  target_include_directories(websocketsclient_test PRIVATE utilities)
+ endif()


^ permalink raw reply related	[flat|nested] 6+ messages in thread

* [gentoo-commits] repo/proj/guru:dev commit in: dev-cpp/cpprestsdk/, dev-cpp/cpprestsdk/files/
@ 2023-12-17 20:45 Jan-Espen Oversand
  0 siblings, 0 replies; 6+ messages in thread
From: Jan-Espen Oversand @ 2023-12-17 20:45 UTC (permalink / raw
  To: gentoo-commits

commit:     49c50e660d8ade6c055e04087f37b28d2856f348
Author:     Jan-Espen Oversand <sigsegv <AT> radiotube <DOT> org>
AuthorDate: Sun Dec 17 20:44:20 2023 +0000
Commit:     Jan-Espen Oversand <sigsegv <AT> radiotube <DOT> org>
CommitDate: Sun Dec 17 20:44:54 2023 +0000
URL:        https://gitweb.gentoo.org/repo/proj/guru.git/commit/?id=49c50e66

dev-cpp/cpprestsdk: disable http listener tests

Bug: https://bugs.gentoo.org/920204
Closes: https://bugs.gentoo.org/920204
Signed-off-by: Jan-Espen Oversand <sigsegv <AT> radiotube.org>

 .../{cpprestsdk-2.10.19-r1.ebuild => cpprestsdk-2.10.19-r2.ebuild}     | 0
 dev-cpp/cpprestsdk/files/cpprestsdk-2.10.19-disabl-int-tests.patch     | 3 ++-
 2 files changed, 2 insertions(+), 1 deletion(-)

diff --git a/dev-cpp/cpprestsdk/cpprestsdk-2.10.19-r1.ebuild b/dev-cpp/cpprestsdk/cpprestsdk-2.10.19-r2.ebuild
similarity index 100%
rename from dev-cpp/cpprestsdk/cpprestsdk-2.10.19-r1.ebuild
rename to dev-cpp/cpprestsdk/cpprestsdk-2.10.19-r2.ebuild

diff --git a/dev-cpp/cpprestsdk/files/cpprestsdk-2.10.19-disabl-int-tests.patch b/dev-cpp/cpprestsdk/files/cpprestsdk-2.10.19-disabl-int-tests.patch
index 25a95cc9c5..6ae6e3759c 100644
--- a/dev-cpp/cpprestsdk/files/cpprestsdk-2.10.19-disabl-int-tests.patch
+++ b/dev-cpp/cpprestsdk/files/cpprestsdk-2.10.19-disabl-int-tests.patch
@@ -3,8 +3,9 @@
 @@ -1,3 +1,3 @@
  add_subdirectory(utilities)
 -add_subdirectory(client)
+-add_subdirectory(listener)
 +#add_subdirectory(client)
- add_subdirectory(listener)
++#add_subdirectory(listener)
 --- a/Release/tests/functional/websockets/CMakeLists.txt
 +++ b/Release/tests/functional/websockets/CMakeLists.txt
 @@ -27,9 +27,9 @@ if (NOT CPPREST_EXCLUDE_WEBSOCKETS)


^ permalink raw reply related	[flat|nested] 6+ messages in thread

* [gentoo-commits] repo/proj/guru:dev commit in: dev-cpp/cpprestsdk/, dev-cpp/cpprestsdk/files/
@ 2023-12-17 22:52 Jan-Espen Oversand
  0 siblings, 0 replies; 6+ messages in thread
From: Jan-Espen Oversand @ 2023-12-17 22:52 UTC (permalink / raw
  To: gentoo-commits

commit:     102ae60a0ca9167b3ffa33fd6dcf892014bfb143
Author:     Jan-Espen Oversand <sigsegv <AT> radiotube <DOT> org>
AuthorDate: Sun Dec 17 22:51:02 2023 +0000
Commit:     Jan-Espen Oversand <sigsegv <AT> radiotube <DOT> org>
CommitDate: Sun Dec 17 22:51:51 2023 +0000
URL:        https://gitweb.gentoo.org/repo/proj/guru.git/commit/?id=102ae60a

dev-cpp/cpprestsdk: disable werror flag by default

Bug: https://bugs.gentoo.org/920029
Closes: https://bugs.gentoo.org/920029
Signed-off-by: Jan-Espen Oversand <sigsegv <AT> radiotube.org>

 ...restsdk-2.10.19-r2.ebuild => cpprestsdk-2.10.19-r3.ebuild} |  1 +
 .../files/cpprestsdk-2.10.19-disable-werror-default.patch     | 11 +++++++++++
 2 files changed, 12 insertions(+)

diff --git a/dev-cpp/cpprestsdk/cpprestsdk-2.10.19-r2.ebuild b/dev-cpp/cpprestsdk/cpprestsdk-2.10.19-r3.ebuild
similarity index 93%
rename from dev-cpp/cpprestsdk/cpprestsdk-2.10.19-r2.ebuild
rename to dev-cpp/cpprestsdk/cpprestsdk-2.10.19-r3.ebuild
index 59ef5785bf..1e99a9fa6d 100644
--- a/dev-cpp/cpprestsdk/cpprestsdk-2.10.19-r2.ebuild
+++ b/dev-cpp/cpprestsdk/cpprestsdk-2.10.19-r3.ebuild
@@ -27,6 +27,7 @@ BDEPEND=">=dev-util/cmake-3.23
 PATCHES=(
 	"${FILESDIR}"/cpprestsdk-${PV}-warnings.patch
 	"${FILESDIR}"/cpprestsdk-${PV}-disabl-int-tests.patch
+	"${FILESDIR}"/cpprestsdk-${PV}-disable-werror-default.patch
 )
 
 src_configure() {

diff --git a/dev-cpp/cpprestsdk/files/cpprestsdk-2.10.19-disable-werror-default.patch b/dev-cpp/cpprestsdk/files/cpprestsdk-2.10.19-disable-werror-default.patch
new file mode 100644
index 0000000000..44e56d108c
--- /dev/null
+++ b/dev-cpp/cpprestsdk/files/cpprestsdk-2.10.19-disable-werror-default.patch
@@ -0,0 +1,11 @@
+--- a/Release/CMakeLists.txt
++++ b/Release/CMakeLists.txt
+@@ -15,7 +15,7 @@ set(CPPREST_VERSION_REVISION 19)
+ 
+ enable_testing()
+ 
+-set(WERROR ON CACHE BOOL "Treat Warnings as Errors.")
++set(WERROR OFF CACHE BOOL "Treat Warnings as Errors.")
+ set(CPPREST_EXCLUDE_WEBSOCKETS OFF CACHE BOOL "Exclude websockets functionality.")
+ set(CPPREST_EXCLUDE_COMPRESSION OFF CACHE BOOL "Exclude compression functionality.")
+ set(CPPREST_EXCLUDE_BROTLI ON CACHE BOOL "Exclude Brotli compression functionality.")


^ permalink raw reply related	[flat|nested] 6+ messages in thread

* [gentoo-commits] repo/proj/guru:dev commit in: dev-cpp/cpprestsdk/, dev-cpp/cpprestsdk/files/
@ 2025-06-06 13:17 Jan-Espen Oversand
  0 siblings, 0 replies; 6+ messages in thread
From: Jan-Espen Oversand @ 2025-06-06 13:17 UTC (permalink / raw
  To: gentoo-commits

commit:     ef44432e15e1d778bc7231165b17d04ede179570
Author:     Jan-Espen Oversand <sigsegv <AT> radiotube <DOT> org>
AuthorDate: Fri Jun  6 13:17:20 2025 +0000
Commit:     Jan-Espen Oversand <sigsegv <AT> radiotube <DOT> org>
CommitDate: Fri Jun  6 13:17:20 2025 +0000
URL:        https://gitweb.gentoo.org/repo/proj/guru.git/commit/?id=ef44432e

dev-cpp/cpprestsdk: cmake 4 patch

Signed-off-by: Jan-Espen Oversand <sigsegv <AT> radiotube.org>

 dev-cpp/cpprestsdk/cpprestsdk-2.10.19-r5.ebuild    | 39 ++++++++++++++++++++++
 .../files/cpprestsdk-2.10.19-cmake-4.patch         | 26 +++++++++++++++
 2 files changed, 65 insertions(+)

diff --git a/dev-cpp/cpprestsdk/cpprestsdk-2.10.19-r5.ebuild b/dev-cpp/cpprestsdk/cpprestsdk-2.10.19-r5.ebuild
new file mode 100644
index 0000000000..057af0b4a1
--- /dev/null
+++ b/dev-cpp/cpprestsdk/cpprestsdk-2.10.19-r5.ebuild
@@ -0,0 +1,39 @@
+# Copyright 1999-2025 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit cmake
+
+DESCRIPTION="A Microsoft project for cloud-based client-server communication."
+HOMEPAGE="https://github.com/microsoft/cpprestsdk"
+SRC_URI="https://github.com/microsoft/cpprestsdk/archive/refs/tags/v${PV}.tar.gz -> ${P}.tar.gz"
+LICENSE="MIT"
+SLOT="0"
+KEYWORDS="~amd64"
+
+RDEPEND=">=dev-libs/openssl-1.1.1q
+		>=dev-libs/boost-1.80.0-r1
+		>=sys-libs/zlib-1.2.13-r1"
+
+DEPEND="${RDEPEND}"
+
+BDEPEND="
+		app-alternatives/ninja
+		>=sys-devel/gcc-11.3.0
+		>=virtual/pkgconfig-2-r1
+		>=dev-cpp/websocketpp-0.8.2
+"
+
+PATCHES=(
+	"${FILESDIR}"/cpprestsdk-${PV}-warnings.patch
+	"${FILESDIR}"/cpprestsdk-${PV}-disabl-int-tests.patch
+	"${FILESDIR}"/cpprestsdk-${PV}-disable-werror-default.patch
+	"${FILESDIR}"/cpprestsdk-${PV}-boost-1.87-compat.patch
+	"${FILESDIR}"/cpprestsdk-${PV}-cmake-4.patch
+)
+
+src_configure() {
+	local mycmakeargs=( -DCMAKE_BUILD_TYPE=Release )
+	cmake_src_configure
+}

diff --git a/dev-cpp/cpprestsdk/files/cpprestsdk-2.10.19-cmake-4.patch b/dev-cpp/cpprestsdk/files/cpprestsdk-2.10.19-cmake-4.patch
new file mode 100644
index 0000000000..32a337978b
--- /dev/null
+++ b/dev-cpp/cpprestsdk/files/cpprestsdk-2.10.19-cmake-4.patch
@@ -0,0 +1,26 @@
+--- a/Build_iOS/CMakeLists.txt
++++ b/Build_iOS/CMakeLists.txt
+@@ -1,5 +1,5 @@
+ project(casablanca-ios NONE)
+-cmake_minimum_required(VERSION 3.9)
++cmake_minimum_required(VERSION 3.10)
+ 
+ enable_testing()
+ 
+--- a/Release/CMakeLists.txt
++++ b/Release/CMakeLists.txt
+@@ -1,5 +1,5 @@
+ set(CMAKE_LEGACY_CYGWIN_WIN32 0)
+-cmake_minimum_required(VERSION 3.9)
++cmake_minimum_required(VERSION 3.10)
+ if(POLICY CMP0042)
+   cmake_policy(SET CMP0042 NEW) # use MACOSX_RPATH
+ endif()
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -1,4 +1,4 @@
+-cmake_minimum_required(VERSION 3.9)
++cmake_minimum_required(VERSION 3.10)
+ project(cpprestsdk-root NONE)
+ enable_testing()
+ add_subdirectory(Release)


^ permalink raw reply related	[flat|nested] 6+ messages in thread

* [gentoo-commits] repo/proj/guru:dev commit in: dev-cpp/cpprestsdk/, dev-cpp/cpprestsdk/files/
@ 2025-07-13 13:01 Jan-Espen Oversand
  0 siblings, 0 replies; 6+ messages in thread
From: Jan-Espen Oversand @ 2025-07-13 13:01 UTC (permalink / raw
  To: gentoo-commits

commit:     9e5085234797d529eca828d179334b8045382e9f
Author:     Jan-Espen Oversand <sigsegv <AT> radiotube <DOT> org>
AuthorDate: Sun Jul 13 12:58:10 2025 +0000
Commit:     Jan-Espen Oversand <sigsegv <AT> radiotube <DOT> org>
CommitDate: Sun Jul 13 12:58:10 2025 +0000
URL:        https://gitweb.gentoo.org/repo/proj/guru.git/commit/?id=9e508523

dev-cpp/cpprestsdk: patch for llvm up to 20

Llvm has previously required sizes/implementation of objects used in
containers and std::unique_ptr for more methods than gcc. Also in later
llvms like 19 and 20 unsigned types are not possible to use with the
std::char_traits. Cpprestsdk does use a lot of unsigned types with C++
streams and while that seems to be fine with MSVC and at least gcc up
until some point, it does not work at all with llvm 19 and 20.

Signed-off-by: Jan-Espen Oversand <sigsegv <AT> radiotube.org>

 dev-cpp/cpprestsdk/cpprestsdk-2.10.19-r6.ebuild    |  41 ++
 ...cpprestsdk-2.10.19-llvm-char-traits-patch.patch | 429 +++++++++++++++++++++
 .../cpprestsdk-2.10.19-llvm-json-unique-ptr.patch  | 216 +++++++++++
 3 files changed, 686 insertions(+)

diff --git a/dev-cpp/cpprestsdk/cpprestsdk-2.10.19-r6.ebuild b/dev-cpp/cpprestsdk/cpprestsdk-2.10.19-r6.ebuild
new file mode 100644
index 0000000000..f8d72b6554
--- /dev/null
+++ b/dev-cpp/cpprestsdk/cpprestsdk-2.10.19-r6.ebuild
@@ -0,0 +1,41 @@
+# Copyright 1999-2025 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit cmake
+
+DESCRIPTION="A Microsoft project for cloud-based client-server communication."
+HOMEPAGE="https://github.com/microsoft/cpprestsdk"
+SRC_URI="https://github.com/microsoft/cpprestsdk/archive/refs/tags/v${PV}.tar.gz -> ${P}.tar.gz"
+LICENSE="MIT"
+SLOT="0"
+KEYWORDS="~amd64 ~x86"
+
+RDEPEND=">=dev-libs/openssl-1.1.1q
+		>=dev-libs/boost-1.80.0-r1:=
+		>=sys-libs/zlib-1.2.13-r1"
+
+DEPEND="${RDEPEND}"
+
+BDEPEND="
+		app-alternatives/ninja
+		>=sys-devel/gcc-11.3.0
+		>=virtual/pkgconfig-2-r1
+		>=dev-cpp/websocketpp-0.8.2
+"
+
+PATCHES=(
+	"${FILESDIR}"/cpprestsdk-${PV}-warnings.patch
+	"${FILESDIR}"/cpprestsdk-${PV}-disabl-int-tests.patch
+	"${FILESDIR}"/cpprestsdk-${PV}-disable-werror-default.patch
+	"${FILESDIR}"/cpprestsdk-${PV}-boost-1.87-compat.patch
+	"${FILESDIR}"/cpprestsdk-${PV}-cmake-4.patch
+	"${FILESDIR}"/cpprestsdk-${PV}-llvm-char-traits-patch.patch
+	"${FILESDIR}"/cpprestsdk-${PV}-llvm-json-unique-ptr.patch
+)
+
+src_configure() {
+	local mycmakeargs=( -DCMAKE_BUILD_TYPE=Release )
+	cmake_src_configure
+}

diff --git a/dev-cpp/cpprestsdk/files/cpprestsdk-2.10.19-llvm-char-traits-patch.patch b/dev-cpp/cpprestsdk/files/cpprestsdk-2.10.19-llvm-char-traits-patch.patch
new file mode 100644
index 0000000000..4d123d76f7
--- /dev/null
+++ b/dev-cpp/cpprestsdk/files/cpprestsdk-2.10.19-llvm-char-traits-patch.patch
@@ -0,0 +1,429 @@
+--- a/Release/include/cpprest/streams.h	(revision 0b1ce318a757bbfb89bdb0fffb61ca4e38dc3b33)
++++ b/Release/include/cpprest/streams.h	(revision 32b322b564e5e540ff02393ffe3bd3bade8d299c)
+@@ -16,6 +16,7 @@
+ #define CASA_STREAMS_H
+ 
+ #include "cpprest/astreambuf.h"
++#include "cpprest/details/char_traits.h"
+ #include <iosfwd>
+ #include <cstdio>
+ 
+@@ -60,30 +61,95 @@
+     concurrency::streams::streambuf<CharType> m_buffer;
+ };
+ 
+-template<typename CharType>
++template<typename CharType, class Traits = typename utility::CanUseStdCharTraits<CharType>::TraitsType>
+ struct Value2StringFormatter
+ {
++    struct SanitizeInput
++    {
++        const std::basic_string<char> &operator () (const std::basic_string<char> &input)
++        {
++            return input;
++        }
++        template <class InputTraits> std::basic_string<char> operator () (const std::basic_string<unsigned char, InputTraits> &input)
++        {
++            return {reinterpret_cast<const char *>(input.c_str()), input.size()};
++        }
++        const char *operator () (const char *input) {
++            return input;
++        }
++        const char *operator () (const unsigned char *input)
++        {
++            return reinterpret_cast<const char *>(input);
++        }
++        template <class T> T operator () (T input)
++        {
++            return input;
++        }
++    };
++    struct GenerateFormatOutput
++    {
++        std::basic_string<CharType,Traits> &&operator() (std::basic_string<CharType,Traits> &&result)
++        {
++            return std::move(result);
++        }
++        std::basic_string<CharType,Traits> operator() (const std::basic_string<char> &intermediate)
++        {
++            return {reinterpret_cast<const CharType *>(intermediate.c_str()), intermediate.size()};
++        }
++    };
+     template<typename T>
+-    static std::basic_string<CharType> format(const T& val)
++    static std::basic_string<CharType, Traits> format(const T& val)
+     {
+-        std::basic_ostringstream<CharType> ss;
++        typename std::conditional<
++            sizeof(CharType) == 1,
++            std::basic_ostringstream<char>,
++            std::basic_ostringstream<typename std::make_signed<CharType>::type>
++        >::type ss;
++        SanitizeInput sanitizer;
++        ss << sanitizer(val);
++        typename std::conditional<
++            sizeof(CharType) == 1,
++            std::basic_string<char>,
++            std::basic_string<typename std::make_signed<CharType>::type>
++        >::type str = ss.str();
++        GenerateFormatOutput generateFormatOutput;
++        return generateFormatOutput(std::move(str));
++    }
++};
++
++template<class Traits, typename T>
++struct Value2StringFormatterUint8Format
++{
++    std::basic_string<uint8_t, Traits> operator () (const T& val)
++    {
++        std::basic_ostringstream<char> ss;
+         ss << val;
+-        return ss.str();
++        return reinterpret_cast<const uint8_t*>(ss.str().c_str());
++    }
++};
++
++template <class Traits>
++struct Value2StringFormatterUint8Format<Traits, std::basic_string<uint8_t,Traits>>
++{
++    std::basic_string<uint8_t, Traits> operator () (
++        const std::basic_string<uint8_t, typename utility::CanUseStdCharTraits<uint8_t>::TraitsType>& val)
++    {
++        Value2StringFormatterUint8Format<Traits,std::basic_string<char>> format;
++        return format(reinterpret_cast<const std::basic_string<char>&>(val));
+     }
+ };
+ 
+ template<>
+ struct Value2StringFormatter<uint8_t>
+ {
+-    template<typename T>
+-    static std::basic_string<uint8_t> format(const T& val)
++    template <typename T, class Traits = typename utility::CanUseStdCharTraits<uint8_t>::TraitsType>
++    static std::basic_string<uint8_t, Traits> format(const T& val)
+     {
+-        std::basic_ostringstream<char> ss;
+-        ss << val;
+-        return reinterpret_cast<const uint8_t*>(ss.str().c_str());
++        Value2StringFormatterUint8Format<Traits, T> format;
++        return format(val);
+     }
+ 
+-    static std::basic_string<uint8_t> format(const utf16string& val)
++    static std::basic_string<uint8_t, typename utility::CanUseStdCharTraits<uint8_t>::TraitsType> format(const utf16string& val)
+     {
+         return format(utility::conversions::utf16_to_utf8(val));
+     }
+@@ -262,7 +328,7 @@
+     /// Write the specified string to the output stream.
+     /// </summary>
+     /// <param name="str">Input string.</param>
+-    pplx::task<size_t> print(const std::basic_string<CharType>& str) const
++    pplx::task<size_t> print(const std::basic_string<CharType,traits>& str) const
+     {
+         pplx::task<size_t> result;
+         if (!_verify_and_return_task(details::_out_stream_msg, result)) return result;
+@@ -273,7 +339,7 @@
+         }
+         else
+         {
+-            auto sharedStr = std::make_shared<std::basic_string<CharType>>(str);
++            auto sharedStr = std::make_shared<std::basic_string<CharType,traits>>(str);
+             return helper()->m_buffer.putn_nocopy(sharedStr->c_str(), sharedStr->size()).then([sharedStr](size_t size) {
+                 return size;
+             });
+@@ -294,7 +360,7 @@
+         if (!_verify_and_return_task(details::_out_stream_msg, result)) return result;
+         // TODO in the future this could be improved to have Value2StringFormatter avoid another unnecessary copy
+         // by putting the string on the heap before calling the print string overload.
+-        return print(details::Value2StringFormatter<CharType>::format(val));
++        return print(details::Value2StringFormatter<CharType, traits>::format(val));
+     }
+ 
+     /// <summary>
+--- a/Release/include/cpprest/astreambuf.h	(revision d17f091b5a753b33fb455e92b590fc9f4e921119)
++++ b/Release/include/cpprest/astreambuf.h	(revision 4188ad89b2cf2e8de3cc3513adcf400fbfdc5ce7)
+@@ -15,6 +15,7 @@
+ 
+ #include "cpprest/asyncrt_utils.h"
+ #include "cpprest/details/basic_types.h"
++#include "cpprest/details/char_traits.h"
+ #include "pplx/pplxtasks.h"
+ #include <atomic>
+ #include <cstring>
+@@ -56,55 +57,28 @@
+ /// <typeparam name="_CharType">
+ /// The data type of the basic element of the stream.
+ /// </typeparam>
++namespace detail
++{
+ template<typename _CharType>
+-struct char_traits : std::char_traits<_CharType>
++struct char_traits : utility::CanUseStdCharTraits<_CharType>::TraitsType
+ {
+     /// <summary>
+     /// Some synchronous functions will return this value if the operation
+     /// requires an asynchronous call in a given situation.
+     /// </summary>
+     /// <returns>An <c>int_type</c> value which implies that an asynchronous call is required.</returns>
+-    static typename std::char_traits<_CharType>::int_type requires_async()
++    static typename utility::CanUseStdCharTraits<_CharType>::TraitsType::int_type requires_async()
+     {
+-        return std::char_traits<_CharType>::eof() - 1;
++        return utility::CanUseStdCharTraits<_CharType>::TraitsType::eof() - 1;
+     }
++};
++}
++template<typename _CharType> struct char_traits : detail::char_traits<_CharType> {
+ };
+ #if !defined(_WIN32)
+-template<>
+-struct char_traits<unsigned char> : private std::char_traits<char>
+-{
+-public:
+-    typedef unsigned char char_type;
+-
+-    using std::char_traits<char>::eof;
+-    using std::char_traits<char>::int_type;
+-    using std::char_traits<char>::off_type;
+-    using std::char_traits<char>::pos_type;
+-
+-    static size_t length(const unsigned char* str)
+-    {
+-        return std::char_traits<char>::length(reinterpret_cast<const char*>(str));
+-    }
+-
+-    static void assign(unsigned char& left, const unsigned char& right) { left = right; }
+-    static unsigned char* assign(unsigned char* left, size_t n, unsigned char value)
+-    {
+-        return reinterpret_cast<unsigned char*>(
+-            std::char_traits<char>::assign(reinterpret_cast<char*>(left), n, static_cast<char>(value)));
+-    }
+-
+-    static unsigned char* copy(unsigned char* left, const unsigned char* right, size_t n)
+-    {
+-        return reinterpret_cast<unsigned char*>(
+-            std::char_traits<char>::copy(reinterpret_cast<char*>(left), reinterpret_cast<const char*>(right), n));
+-    }
+-
+-    static unsigned char* move(unsigned char* left, const unsigned char* right, size_t n)
+-    {
+-        return reinterpret_cast<unsigned char*>(
+-            std::char_traits<char>::move(reinterpret_cast<char*>(left), reinterpret_cast<const char*>(right), n));
+-    }
+-
++template <> struct char_traits<unsigned char> : detail::char_traits<unsigned char> {
++    typedef typename std::char_traits<char>::int_type int_type;
++    static int_type eof() { return std::char_traits<char>::eof(); }
+     static int_type requires_async() { return eof() - 1; }
+ };
+ #endif
+new file mode 100644
+--- /dev/null	(revision 4188ad89b2cf2e8de3cc3513adcf400fbfdc5ce7)
++++ b/Release/include/cpprest/details/char_traits.h	(revision 4188ad89b2cf2e8de3cc3513adcf400fbfdc5ce7)
+@@ -0,0 +1,102 @@
++//
++// Created by sigsegv on 6/28/25.
++//
++
++#ifndef CPPRESTSDK_ROOT_CHAR_TRAITS_H
++#define CPPRESTSDK_ROOT_CHAR_TRAITS_H
++
++#include <type_traits>
++#include <string>
++
++namespace utility {
++
++namespace detail {
++
++template <typename T> struct IntTypeFor {
++    typedef typename std::conditional<std::is_unsigned<T>::value, unsigned long long int, long long int>::type type;
++};
++template <> struct IntTypeFor<char> {
++    typedef typename std::char_traits<char>::int_type type;
++};
++template <> struct IntTypeFor<unsigned char> {
++    typedef typename std::make_unsigned<typename std::char_traits<char>::int_type>::type type;
++};
++
++template <typename T> class DetailCharTraits
++{
++public:
++    using char_type  = T;
++    using int_type   = typename IntTypeFor<T>::type;
++    using off_type   = std::streamoff;
++    using pos_type   = std::streampos;
++    using state_type = mbstate_t;
++
++    static void assign(char_type& r, const char_type& a) noexcept { r = a; }
++    static char_type to_char_type(int_type c) noexcept { return char_type(c); }
++    static int_type  to_int_type(char_type c) noexcept { return c; }
++    static bool eq(char_type a, char_type b) noexcept { return a == b; }
++    static bool lt(char_type a, char_type b) noexcept { return a <  b; }
++    static int compare(const char_type* s1,const char_type* s2,size_t n){
++        for (; n--; ++s1, ++s2) {
++            if (!eq(*s1, *s2))
++                return lt(*s1,*s2)?-1:1;
++        }
++        return 0;
++    }
++    static size_t length(const char_type* s){
++        const char_type* p = s;
++        while (*p)
++            ++p;
++        return size_t(p - s);
++    }
++    static const char_type* find(const char_type* s,size_t n,const char_type& a){
++        for (; n--; ++s)
++        {
++            if (eq(*s, a))
++                return s;
++            return nullptr;
++        }
++    }
++    static char_type* move (char_type* r,const char_type* s,size_t n){
++        return (char_type*)memmove(r, s, n * sizeof(char_type));
++    }
++    static char_type* copy (char_type* r,const char_type* s,size_t n){
++        return (char_type*)memcpy (r, s, n * sizeof(char_type));
++    }
++    static char_type* assign(char_type* r,size_t n,char_type a){
++        if (sizeof(char_type) == 1)
++        {
++            return (char_type*)memset(r, a, n);
++        }
++        else
++        {
++            for (char_type *s = r; n--; ++s)
++            {
++                *s = a;
++            }
++        }
++    }
++    static int_type  eof() noexcept { return ~0u; }
++    static int_type  not_eof(int_type c) noexcept { return c == eof() ? 0 : c; }
++};
++
++template <typename T, typename = bool> struct CanUseStdCharTraits : public std::false_type
++{
++public:
++    typedef DetailCharTraits<T> TraitsType;
++};
++
++template <typename T> struct CanUseStdCharTraits<T, decltype(std::char_traits<T>::eq(std::declval<T>(), std::declval<T>()))> : public std::true_type
++{
++public:
++    typedef std::char_traits<T> TraitsType;
++};
++
++}
++
++template <typename T> struct CanUseStdCharTraits : detail::CanUseStdCharTraits<typename std::remove_const<typename std::remove_reference<T>::type>::type> {
++};
++
++}
++
++#endif // CPPRESTSDK_ROOT_CHAR_TRAITS_H
+--- a/Release/tests/functional/streams/memstream_tests.cpp	(revision d17f091b5a753b33fb455e92b590fc9f4e921119)
++++ b/Release/tests/functional/streams/memstream_tests.cpp	(revision 6df13a8c0417ef700c0f164bcd0686ad46f66fd9)
+@@ -8,6 +8,7 @@
+  *
+  * =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+  ****/
++#include "cpprest/details/char_traits.h"
+ #include "stdafx.h"
+ #if defined(__cplusplus_winrt)
+ #include <wrl.h>
+@@ -32,7 +33,7 @@
+ {
+     VERIFY_IS_TRUE(wbuf.can_write());
+ 
+-    std::basic_string<typename StreamBufferType::char_type> s;
++    std::basic_string<typename StreamBufferType::char_type,typename utility::CanUseStdCharTraits<typename StreamBufferType::char_type>::TraitsType> s;
+     s.push_back((typename StreamBufferType::char_type)0);
+     s.push_back((typename StreamBufferType::char_type)1);
+     s.push_back((typename StreamBufferType::char_type)2);
+@@ -137,7 +138,7 @@
+ {
+     VERIFY_IS_TRUE(wbuf.can_write());
+ 
+-    std::basic_string<typename StreamBufferType::char_type> s;
++    std::basic_string<typename StreamBufferType::char_type,typename utility::CanUseStdCharTraits<typename StreamBufferType::char_type>::TraitsType> s;
+     s.push_back((typename StreamBufferType::char_type)0);
+     s.push_back((typename StreamBufferType::char_type)1);
+     s.push_back((typename StreamBufferType::char_type)2);
+@@ -169,7 +170,7 @@
+ 
+     typedef concurrency::streams::rawptr_buffer<CharType> StreamBufferType;
+ 
+-    std::basic_string<CharType> s;
++    std::basic_string<CharType,typename CanUseStdCharTraits<CharType>::TraitsType> s;
+     s.push_back((CharType)0);
+     s.push_back((CharType)1);
+     s.push_back((CharType)2);
+@@ -198,7 +199,7 @@
+     typedef concurrency::streams::container_buffer<CollectionType> StreamBufferType;
+     typedef typename concurrency::streams::container_buffer<CollectionType>::char_type CharType;
+ 
+-    std::basic_string<CharType> s;
++    std::basic_string<CharType, typename utility::CanUseStdCharTraits<CharType>::TraitsType> s;
+     s.push_back((CharType)0);
+     s.push_back((CharType)1);
+     s.push_back((CharType)2);
+@@ -553,7 +554,7 @@
+     VERIFY_IS_TRUE(rwbuf.can_read());
+     VERIFY_IS_TRUE(rwbuf.can_write());
+     VERIFY_IS_FALSE(rwbuf.is_eof());
+-    std::basic_string<typename StreamBufferType::char_type> s;
++    std::basic_string<typename StreamBufferType::char_type, typename utility::CanUseStdCharTraits<typename StreamBufferType::char_type>::TraitsType> s;
+     s.push_back((typename StreamBufferType::char_type)0);
+     s.push_back((typename StreamBufferType::char_type)1);
+     s.push_back((typename StreamBufferType::char_type)2);
+@@ -684,7 +685,7 @@
+     VERIFY_IS_TRUE(rwbuf.can_write());
+ 
+     // Write 4 characters
+-    std::basic_string<typename StreamBufferType::char_type> s;
++    std::basic_string<typename StreamBufferType::char_type, typename utility::CanUseStdCharTraits<typename StreamBufferType::char_type>::TraitsType> s;
+     s.push_back((typename StreamBufferType::char_type)0);
+     s.push_back((typename StreamBufferType::char_type)1);
+     s.push_back((typename StreamBufferType::char_type)2);
+@@ -726,7 +727,7 @@
+     VERIFY_IS_TRUE(rwbuf.can_write());
+ 
+     // Write 4 characters
+-    std::basic_string<typename StreamBufferType::char_type> s;
++    std::basic_string<typename StreamBufferType::char_type, typename utility::CanUseStdCharTraits<typename StreamBufferType::char_type>::TraitsType> s;
+     s.push_back((typename StreamBufferType::char_type)0);
+     s.push_back((typename StreamBufferType::char_type)1);
+     s.push_back((typename StreamBufferType::char_type)2);
+--- a/Release/tests/functional/streams/stdstream_tests.cpp	(revision d17f091b5a753b33fb455e92b590fc9f4e921119)
++++ b/Release/tests/functional/streams/stdstream_tests.cpp	(revision 6df13a8c0417ef700c0f164bcd0686ad46f66fd9)
+@@ -13,6 +13,7 @@
+ #include "cpprest/filestream.h"
+ #include "cpprest/producerconsumerstream.h"
+ #include "cpprest/rawptrstream.h"
++#include "cpprest/details/char_traits.h"
+ 
+ #if (!defined(_WIN32) || !defined(CPPREST_EXCLUDE_WEBSOCKETS)) && !defined(__cplusplus_winrt)
+ #include <boost/interprocess/streams/bufferstream.hpp>
+@@ -303,7 +304,8 @@
+ 
+         const std::streamsize iterations = 100;
+ 
+-        const std::string the_alphabet("abcdefghijklmnopqrstuvwxyz");
++        const char *the_alphabet_characters = "abcdefghijklmnopqrstuvwxyz";
++        const std::basic_string<uint8_t,typename utility::CanUseStdCharTraits<uint8_t>::TraitsType> the_alphabet(reinterpret_cast<const uint8_t *>(the_alphabet_characters));
+ 
+         auto writer = pplx::create_task([ostream, iterations, the_alphabet]() {
+             auto os = ostream;
+@@ -341,7 +343,8 @@
+ 
+         const std::streamsize iterations = 100;
+ 
+-        const std::string the_alphabet("abcdefghijklmnopqrstuvwxyz");
++        const char *the_alphabet_chars = "abcdefghijklmnopqrstuvwxyz";
++        const std::basic_string<uint8_t,typename CanUseStdCharTraits<uint8_t>::TraitsType> the_alphabet(reinterpret_cast<const uint8_t *>(the_alphabet_chars));
+ 
+         auto writer = pplx::create_task([ostream, iterations, the_alphabet]() {
+             auto os = ostream;

diff --git a/dev-cpp/cpprestsdk/files/cpprestsdk-2.10.19-llvm-json-unique-ptr.patch b/dev-cpp/cpprestsdk/files/cpprestsdk-2.10.19-llvm-json-unique-ptr.patch
new file mode 100644
index 0000000000..f609f52a1d
--- /dev/null
+++ b/dev-cpp/cpprestsdk/files/cpprestsdk-2.10.19-llvm-json-unique-ptr.patch
@@ -0,0 +1,216 @@
+--- a/Release/include/cpprest/json.h
++++ b/Release/include/cpprest/json.h
+@@ -737,12 +737,10 @@
+     _ASYNCRTIMP void format(std::basic_string<char>& string) const;
+ 
+ #ifdef ENABLE_JSON_VALUE_VISUALIZER
+-    explicit value(std::unique_ptr<details::_Value> v, value_type kind) : m_value(std::move(v)), m_kind(kind)
++    explicit value(std::unique_ptr<details::_Value> v, value_type kind);
+ #else
+-    explicit value(std::unique_ptr<details::_Value> v) : m_value(std::move(v))
++    explicit value(std::unique_ptr<details::_Value> v);
+ #endif
+-    {
+-    }
+ 
+     std::unique_ptr<details::_Value> m_value;
+ #ifdef ENABLE_JSON_VALUE_VISUALIZER
+@@ -831,9 +829,9 @@
+     typedef storage_type::size_type size_type;
+ 
+ private:
+-    array() : m_elements() {}
+-    array(size_type size) : m_elements(size) {}
+-    array(storage_type elements) : m_elements(std::move(elements)) {}
++    array();
++    array(size_type size);
++    array(storage_type elements);
+ 
+ public:
+     /// <summary>
+@@ -915,20 +913,13 @@
+     /// <returns>Iterator to the new location of the element following the erased element.</returns>
+     /// <remarks>GCC doesn't support erase with const_iterator on vector yet. In the future this should be
+     /// changed.</remarks>
+-    iterator erase(iterator position) { return m_elements.erase(position); }
++    iterator erase(iterator position);
+ 
+     /// <summary>
+     /// Deletes the element at an index of the JSON array.
+     /// </summary>
+     /// <param name="index">The index of the element to delete.</param>
+-    void erase(size_type index)
+-    {
+-        if (index >= m_elements.size())
+-        {
+-            throw json_exception("index out of bounds");
+-        }
+-        m_elements.erase(m_elements.begin() + index);
+-    }
++    void erase(size_type index);
+ 
+     /// <summary>
+     /// Accesses an element of a JSON array. Throws when index out of bounds.
+@@ -959,15 +950,7 @@
+     /// </summary>
+     /// <param name="index">The index of an element in the JSON array.</param>
+     /// <returns>A reference to the value kept in the field.</returns>
+-    json::value& operator[](size_type index)
+-    {
+-        msl::safeint3::SafeInt<size_type> nMinSize(index);
+-        nMinSize += 1;
+-        msl::safeint3::SafeInt<size_type> nlastSize(m_elements.size());
+-        if (nlastSize < nMinSize) m_elements.resize((size_type)nMinSize);
+-
+-        return m_elements[index];
+-    }
++    json::value& operator[](size_type index);
+ 
+     /// <summary>
+     /// Gets the number of elements of the array.
+@@ -998,14 +981,8 @@
+     typedef storage_type::size_type size_type;
+ 
+ private:
+-    object(bool keep_order = false) : m_elements(), m_keep_order(keep_order) {}
+-    object(storage_type elements, bool keep_order = false) : m_elements(std::move(elements)), m_keep_order(keep_order)
+-    {
+-        if (!keep_order)
+-        {
+-            sort(m_elements.begin(), m_elements.end(), compare_pairs);
+-        }
+-    }
++    object(bool keep_order = false);
++    object(storage_type elements, bool keep_order = false);
+ 
+ public:
+     /// <summary>
+@@ -1087,22 +1064,13 @@
+     /// <returns>Iterator to the new location of the element following the erased element.</returns>
+     /// <remarks>GCC doesn't support erase with const_iterator on vector yet. In the future this should be
+     /// changed.</remarks>
+-    iterator erase(iterator position) { return m_elements.erase(position); }
++    iterator erase(iterator position);
+ 
+     /// <summary>
+     /// Deletes an element of the JSON object. If the key doesn't exist, this method throws.
+     /// </summary>
+     /// <param name="key">The key of an element in the JSON object.</param>
+-    void erase(const utility::string_t& key)
+-    {
+-        auto iter = find_by_key(key);
+-        if (iter == m_elements.end())
+-        {
+-            throw web::json::json_exception("Key not found");
+-        }
+-
+-        m_elements.erase(iter);
+-    }
++    void erase(const utility::string_t& key);
+ 
+     /// <summary>
+     /// Accesses an element of a JSON object. If the key doesn't exist, this method throws.
+@@ -1142,17 +1110,7 @@
+     /// <param name="key">The key of an element in the JSON object.</param>
+     /// <returns>If the key exists, a reference to the value kept in the field, otherwise a newly created null value
+     /// that will be stored for the given key.</returns>
+-    json::value& operator[](const utility::string_t& key)
+-    {
+-        auto iter = find_insert_location(key);
+-
+-        if (iter == m_elements.end() || key != iter->first)
+-        {
+-            return m_elements.insert(iter, std::pair<utility::string_t, value>(key, value()))->second;
+-        }
+-
+-        return iter->second;
+-    }
++    json::value& operator[](const utility::string_t& key);
+ 
+     /// <summary>
+     /// Gets an iterator to an element of a JSON object.
+--- a/Release/src/json/json.cpp
++++ b/Release/src/json/json.cpp
+@@ -135,6 +135,14 @@
+ {
+ }
+ 
++#ifdef ENABLE_JSON_VALUE_VISUALIZER
++web::json::value::value(std::unique_ptr<details::_Value> v, value_type kind) : m_value(std::move(v)), m_kind(kind)
++#else
++web::json::value::value(std::unique_ptr<details::_Value> v) : m_value(std::move(v))
++#endif
++{
++}
++
+ web::json::value::value(const value& other)
+     : m_value(other.m_value->_copy_value())
+ #ifdef ENABLE_JSON_VALUE_VISUALIZER
+@@ -495,3 +503,67 @@
+ #endif
+     return instance;
+ }
++
++web::json::array::array() : m_elements() {}
++web::json::array::array(size_type size) : m_elements(size) {}
++web::json::array::array(storage_type elements) : m_elements(std::move(elements)) {}
++
++web::json::array::iterator web::json::array::erase(web::json::array::iterator position)
++{
++    return m_elements.erase(position);
++}
++
++void web::json::array::erase(web::json::array::size_type index)
++{
++    if (index >= m_elements.size())
++    {
++        throw json_exception("index out of bounds");
++    }
++    m_elements.erase(m_elements.begin() + index);
++}
++
++json::value& web::json::array::operator[](web::json::array::size_type index)
++{
++    msl::safeint3::SafeInt<size_type> nMinSize(index);
++    nMinSize += 1;
++    msl::safeint3::SafeInt<size_type> nlastSize(m_elements.size());
++    if (nlastSize < nMinSize) m_elements.resize((size_type)nMinSize);
++
++    return m_elements[index];
++}
++
++web::json::object::object(bool keep_order) : m_elements(), m_keep_order(keep_order) {}
++web::json::object::object(storage_type elements, bool keep_order) : m_elements(std::move(elements)), m_keep_order(keep_order)
++{
++    if (!keep_order)
++    {
++        sort(m_elements.begin(), m_elements.end(), compare_pairs);
++    }
++}
++web::json::object::iterator web::json::object::erase(iterator position)
++{
++    return m_elements.erase(position);
++}
++
++void web::json::object::erase(const utility::string_t& key)
++{
++    auto iter = find_by_key(key);
++    if (iter == m_elements.end())
++    {
++        throw web::json::json_exception("Key not found");
++    }
++
++    m_elements.erase(iter);
++}
++
++json::value& web::json::object::operator[](const utility::string_t& key)
++{
++    auto iter = find_insert_location(key);
++
++    if (iter == m_elements.end() || key != iter->first)
++    {
++        return m_elements.insert(iter, std::pair<utility::string_t, value>(key, value()))->second;
++    }
++
++    return iter->second;
++}


^ permalink raw reply related	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2025-07-13 13:01 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-07-13 13:01 [gentoo-commits] repo/proj/guru:dev commit in: dev-cpp/cpprestsdk/, dev-cpp/cpprestsdk/files/ Jan-Espen Oversand
  -- strict thread matches above, loose matches on Subject: below --
2025-06-06 13:17 Jan-Espen Oversand
2023-12-17 22:52 Jan-Espen Oversand
2023-12-17 20:45 Jan-Espen Oversand
2023-12-15 20:49 Jan-Espen Oversand
2023-12-14 20:33 Jan-Espen Oversand

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox