[PATCH 06/13 v2] msvcp90: Add implementation of _Concurrent_vector_Internal_copy.
Hua Meng
161220092 at smail.nju.edu.cn
Tue Jul 31 10:17:15 CDT 2018
Signed-off-by: Hua meng <161220092 at smail.nju.edu.cn>
---
dlls/msvcp90/misc.c | 20 ++++++++++++++++++--
dlls/msvcp90/msvcp90.h | 1 +
2 files changed, 19 insertions(+), 2 deletions(-)
diff --git a/dlls/msvcp90/misc.c b/dlls/msvcp90/misc.c
index a2baf12567..aa969d2200 100644
--- a/dlls/msvcp90/misc.c
+++ b/dlls/msvcp90/misc.c
@@ -2022,9 +2022,25 @@ void * __thiscall _Concurrent_vector_base_v4__Internal_compact(
DEFINE_THISCALL_WRAPPER(_Concurrent_vector_base_v4__Internal_copy, 16)
void __thiscall _Concurrent_vector_base_v4__Internal_copy(
_Concurrent_vector_base_v4 *this, const _Concurrent_vector_base_v4 *v,
- MSVCP_size_t len, void (__cdecl *copy)(void*, const void*, MSVCP_size_t))
+ MSVCP_size_t element_size, void (__cdecl *copy)(void*, const void*, MSVCP_size_t))
{
- FIXME("(%p %p %ld %p) stub\n", this, v, len, copy);
+ MSVCP_size_t seg_no, v_size;
+ int i;
+
+ TRACE("(%p %p %ld %p)\n", this, v, element_size, copy);
+
+ v_size = v->early_size;
+ if(!v_size) {
+ this->early_size = 0;
+ return;
+ }
+ _Concurrent_vector_base_v4__Internal_reserve(this, v_size,
+ element_size, MSVCP_SIZE_T_MAX / element_size);
+ seg_no = _vector_base_v4__Segment_index_of(v_size - 1);
+ for(i = 0; i < seg_no; i++)
+ copy(this->segment[i], v->segment[i], i ? 1 << i : 2);
+ copy(this->segment[i], v->segment[i], v_size - (1 << i & ~1));
+ this->early_size = v_size;
}
/* ?_Internal_grow_by at _Concurrent_vector_base_v4@details at Concurrency@@IAEIIIP6AXPAXPBXI at Z1@Z */
diff --git a/dlls/msvcp90/msvcp90.h b/dlls/msvcp90/msvcp90.h
index 16eaa48c53..40fbe4ba80 100644
--- a/dlls/msvcp90/msvcp90.h
+++ b/dlls/msvcp90/msvcp90.h
@@ -25,6 +25,7 @@
typedef unsigned char MSVCP_bool;
typedef SIZE_T MSVCP_size_t;
+#define MSVCP_SIZE_T_MAX (~(MSVCP_size_t)0)
#if _MSVCP_VER >= 100
typedef __int64 DECLSPEC_ALIGN(8) streamoff;
typedef __int64 DECLSPEC_ALIGN(8) streamsize;
--
2.11.0
More information about the wine-devel
mailing list