[prev in list] [next in list] [prev in thread] [next in thread] 

List:       wine-devel
Subject:    [PATCH 13/13 v2] msvcp90: Add implementation of _Concurrent_vector_Internal_push_back.
From:       Hua Meng <161220092 () smail ! nju ! edu ! cn>
Date:       2018-07-31 15:18:50
Message-ID: d775b240-f594-26fd-1e08-c0285172e123 () smail ! nju ! edu ! cn+37737D5D674F9FF9
[Download RAW message or body]

Signed-off-by: Hua meng <161220092@smail.nju.edu.cn>
---
 dlls/msvcp90/misc.c | 20 +++++++++++++++++---
 1 file changed, 17 insertions(+), 3 deletions(-)

diff --git a/dlls/msvcp90/misc.c b/dlls/msvcp90/misc.c
index 2e1bf9542f..342fed7c08 100644
--- a/dlls/msvcp90/misc.c
+++ b/dlls/msvcp90/misc.c
@@ -2198,10 +2198,24 @@ MSVCP_size_t __thiscall _Concurrent_vector_base_v4__Internal_grow_to_at_least_wi
 /* ?_Internal_push_back@_Concurrent_vector_base_v4@details@Concurrency@@IEAAPEAX_KAEA_K@Z */
 DEFINE_THISCALL_WRAPPER(_Concurrent_vector_base_v4__Internal_push_back, 12)
 void * __thiscall _Concurrent_vector_base_v4__Internal_push_back(
-       _Concurrent_vector_base_v4 *this, MSVCP_size_t len1, MSVCP_size_t *len2)
+       _Concurrent_vector_base_v4 *this, MSVCP_size_t element_size, MSVCP_size_t *idx)
 {
-    FIXME("(%p %ld %p) stub\n", this, len1, len2);
-    return NULL;
+    MSVCP_size_t index, seg, segment_base;
+    void *data;
+
+    TRACE("(%p %ld %p)\n", this, element_size, idx);
+
+    do {
+        index = this->early_size;
+        _Concurrent_vector_base_v4__Internal_reserve(this, index + 1,
+                element_size, MSVCP_SIZE_T_MAX / element_size);
+    } while(InterlockedCompareExchangeSizeT(&this->early_size, index + 1, index) != index);
+    seg = _vector_base_v4__Segment_index_of(index);
+    segment_base = (seg == 0) ? 0 : (1 << seg);
+    data = (BYTE*)this->segment[seg] + element_size * (index - segment_base);
+    *idx = index;
+
+    return data;
 }
 
 /* ?_Internal_resize@_Concurrent_vector_base_v4@details@Concurrency@@IAEXIIIP6AXPAXI@ZP6AX0PBXI@Z2@Z */
-- 
2.11.0






[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic