OLD | NEW |
1 // Copyright 2014 PDFium Authors. All rights reserved. | 1 // Copyright 2014 PDFium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com | 5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com |
6 | 6 |
7 #include "../../include/fxcrt/fx_ext.h" | 7 #include "../../include/fxcrt/fx_ext.h" |
8 #include "plex.h" | 8 #include "plex.h" |
9 static void ConstructElement(CFX_ByteString* pNewData) | 9 static void ConstructElement(CFX_ByteString* pNewData) |
10 { | 10 { |
11 new (pNewData) CFX_ByteString(); | 11 new (pNewData) CFX_ByteString(); |
12 } | 12 } |
13 static void DestructElement(CFX_ByteString* pOldData) | 13 static void DestructElement(CFX_ByteString* pOldData) |
14 { | 14 { |
15 pOldData->~CFX_ByteString(); | 15 pOldData->~CFX_ByteString(); |
16 } | 16 } |
17 CFX_MapPtrToPtr::CFX_MapPtrToPtr(int nBlockSize, IFX_Allocator* pAllocator) | 17 CFX_MapPtrToPtr::CFX_MapPtrToPtr(int nBlockSize) |
18 : m_pAllocator(pAllocator) | 18 : m_pHashTable(NULL) |
19 , m_pHashTable(NULL) | |
20 , m_nHashTableSize(17) | 19 , m_nHashTableSize(17) |
21 , m_nCount(0) | 20 , m_nCount(0) |
22 , m_pFreeList(NULL) | 21 , m_pFreeList(NULL) |
23 , m_pBlocks(NULL) | 22 , m_pBlocks(NULL) |
24 , m_nBlockSize(nBlockSize) | 23 , m_nBlockSize(nBlockSize) |
25 { | 24 { |
26 ASSERT(m_nBlockSize > 0); | 25 ASSERT(m_nBlockSize > 0); |
27 } | 26 } |
28 void CFX_MapPtrToPtr::RemoveAll() | 27 void CFX_MapPtrToPtr::RemoveAll() |
29 { | 28 { |
30 if (m_pHashTable) { | 29 if (m_pHashTable) { |
31 FX_Allocator_Free(m_pAllocator, m_pHashTable); | 30 FX_Free(m_pHashTable); |
32 m_pHashTable = NULL; | 31 m_pHashTable = NULL; |
33 } | 32 } |
34 m_nCount = 0; | 33 m_nCount = 0; |
35 m_pFreeList = NULL; | 34 m_pFreeList = NULL; |
36 m_pBlocks->FreeDataChain(m_pAllocator); | 35 m_pBlocks->FreeDataChain(); |
37 m_pBlocks = NULL; | 36 m_pBlocks = NULL; |
38 } | 37 } |
39 CFX_MapPtrToPtr::~CFX_MapPtrToPtr() | 38 CFX_MapPtrToPtr::~CFX_MapPtrToPtr() |
40 { | 39 { |
41 RemoveAll(); | 40 RemoveAll(); |
42 ASSERT(m_nCount == 0); | 41 ASSERT(m_nCount == 0); |
43 } | 42 } |
44 FX_DWORD CFX_MapPtrToPtr::HashKey(void* key) const | 43 FX_DWORD CFX_MapPtrToPtr::HashKey(void* key) const |
45 { | 44 { |
46 return ((FX_DWORD)(FX_UINTPTR)key) >> 4; | 45 return ((FX_DWORD)(FX_UINTPTR)key) >> 4; |
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
115 if (pAssoc->key == key) { | 114 if (pAssoc->key == key) { |
116 return pAssoc; | 115 return pAssoc; |
117 } | 116 } |
118 } | 117 } |
119 return NULL; | 118 return NULL; |
120 } | 119 } |
121 CFX_MapPtrToPtr::CAssoc* | 120 CFX_MapPtrToPtr::CAssoc* |
122 CFX_MapPtrToPtr::NewAssoc() | 121 CFX_MapPtrToPtr::NewAssoc() |
123 { | 122 { |
124 if (m_pFreeList == NULL) { | 123 if (m_pFreeList == NULL) { |
125 CFX_Plex* newBlock = CFX_Plex::Create(m_pAllocator, m_pBlocks, m_nBlockS
ize, sizeof(CFX_MapPtrToPtr::CAssoc)); | 124 CFX_Plex* newBlock = CFX_Plex::Create(m_pBlocks, m_nBlockSize, sizeof(CF
X_MapPtrToPtr::CAssoc)); |
126 CFX_MapPtrToPtr::CAssoc* pAssoc = (CFX_MapPtrToPtr::CAssoc*)newBlock->da
ta(); | 125 CFX_MapPtrToPtr::CAssoc* pAssoc = (CFX_MapPtrToPtr::CAssoc*)newBlock->da
ta(); |
127 pAssoc += m_nBlockSize - 1; | 126 pAssoc += m_nBlockSize - 1; |
128 for (int i = m_nBlockSize - 1; i >= 0; i--, pAssoc--) { | 127 for (int i = m_nBlockSize - 1; i >= 0; i--, pAssoc--) { |
129 pAssoc->pNext = m_pFreeList; | 128 pAssoc->pNext = m_pFreeList; |
130 m_pFreeList = pAssoc; | 129 m_pFreeList = pAssoc; |
131 } | 130 } |
132 } | 131 } |
133 ASSERT(m_pFreeList != NULL); | 132 ASSERT(m_pFreeList != NULL); |
134 CFX_MapPtrToPtr::CAssoc* pAssoc = m_pFreeList; | 133 CFX_MapPtrToPtr::CAssoc* pAssoc = m_pFreeList; |
135 m_pFreeList = m_pFreeList->pNext; | 134 m_pFreeList = m_pFreeList->pNext; |
136 m_nCount++; | 135 m_nCount++; |
137 ASSERT(m_nCount > 0); | 136 ASSERT(m_nCount > 0); |
138 pAssoc->key = 0; | 137 pAssoc->key = 0; |
139 pAssoc->value = 0; | 138 pAssoc->value = 0; |
140 return pAssoc; | 139 return pAssoc; |
141 } | 140 } |
142 void CFX_MapPtrToPtr::InitHashTable( | 141 void CFX_MapPtrToPtr::InitHashTable( |
143 FX_DWORD nHashSize, FX_BOOL bAllocNow) | 142 FX_DWORD nHashSize, FX_BOOL bAllocNow) |
144 { | 143 { |
145 ASSERT(m_nCount == 0); | 144 ASSERT(m_nCount == 0); |
146 ASSERT(nHashSize > 0); | 145 ASSERT(nHashSize > 0); |
147 if (m_pHashTable != NULL) { | 146 if (m_pHashTable != NULL) { |
148 FX_Allocator_Free(m_pAllocator, m_pHashTable); | 147 FX_Free(m_pHashTable); |
149 m_pHashTable = NULL; | 148 m_pHashTable = NULL; |
150 } | 149 } |
151 if (bAllocNow) { | 150 if (bAllocNow) { |
152 m_pHashTable = FX_Allocator_Alloc(m_pAllocator, CAssoc*, nHashSize); | 151 m_pHashTable = FX_Alloc(CAssoc*, nHashSize); |
153 if (m_pHashTable) { | |
154 FXSYS_memset32(m_pHashTable, 0, sizeof(CAssoc*) * nHashSize); | |
155 } | |
156 } | 152 } |
157 m_nHashTableSize = nHashSize; | 153 m_nHashTableSize = nHashSize; |
158 } | 154 } |
159 FX_BOOL CFX_MapPtrToPtr::RemoveKey(void* key) | 155 FX_BOOL CFX_MapPtrToPtr::RemoveKey(void* key) |
160 { | 156 { |
161 if (m_pHashTable == NULL) { | 157 if (m_pHashTable == NULL) { |
162 return FALSE; | 158 return FALSE; |
163 } | 159 } |
164 CAssoc** ppAssocPrev; | 160 CAssoc** ppAssocPrev; |
165 ppAssocPrev = &m_pHashTable[HashKey(key) % m_nHashTableSize]; | 161 ppAssocPrev = &m_pHashTable[HashKey(key) % m_nHashTableSize]; |
(...skipping 11 matching lines...) Expand all Loading... |
177 void CFX_MapPtrToPtr::FreeAssoc(CFX_MapPtrToPtr::CAssoc* pAssoc) | 173 void CFX_MapPtrToPtr::FreeAssoc(CFX_MapPtrToPtr::CAssoc* pAssoc) |
178 { | 174 { |
179 pAssoc->pNext = m_pFreeList; | 175 pAssoc->pNext = m_pFreeList; |
180 m_pFreeList = pAssoc; | 176 m_pFreeList = pAssoc; |
181 m_nCount--; | 177 m_nCount--; |
182 ASSERT(m_nCount >= 0); | 178 ASSERT(m_nCount >= 0); |
183 if (m_nCount == 0) { | 179 if (m_nCount == 0) { |
184 RemoveAll(); | 180 RemoveAll(); |
185 } | 181 } |
186 } | 182 } |
187 CFX_MapByteStringToPtr::CFX_MapByteStringToPtr(int nBlockSize, IFX_Allocator* pA
llocator) | 183 CFX_MapByteStringToPtr::CFX_MapByteStringToPtr(int nBlockSize) |
188 : m_pAllocator(pAllocator) | 184 : m_pHashTable(NULL) |
189 , m_pHashTable(NULL) | |
190 , m_nHashTableSize(17) | 185 , m_nHashTableSize(17) |
191 , m_nCount(0) | 186 , m_nCount(0) |
192 , m_pFreeList(NULL) | 187 , m_pFreeList(NULL) |
193 , m_pBlocks(NULL) | 188 , m_pBlocks(NULL) |
194 , m_nBlockSize(nBlockSize) | 189 , m_nBlockSize(nBlockSize) |
195 { | 190 { |
196 ASSERT(m_nBlockSize > 0); | 191 ASSERT(m_nBlockSize > 0); |
197 } | 192 } |
198 void CFX_MapByteStringToPtr::RemoveAll() | 193 void CFX_MapByteStringToPtr::RemoveAll() |
199 { | 194 { |
200 if (m_pHashTable != NULL) { | 195 if (m_pHashTable != NULL) { |
201 for (FX_DWORD nHash = 0; nHash < m_nHashTableSize; nHash++) { | 196 for (FX_DWORD nHash = 0; nHash < m_nHashTableSize; nHash++) { |
202 CAssoc* pAssoc; | 197 CAssoc* pAssoc; |
203 for (pAssoc = m_pHashTable[nHash]; pAssoc != NULL; | 198 for (pAssoc = m_pHashTable[nHash]; pAssoc != NULL; |
204 pAssoc = pAssoc->pNext) { | 199 pAssoc = pAssoc->pNext) { |
205 DestructElement(&pAssoc->key); | 200 DestructElement(&pAssoc->key); |
206 } | 201 } |
207 } | 202 } |
208 FX_Allocator_Free(m_pAllocator, m_pHashTable); | 203 FX_Free(m_pHashTable); |
209 m_pHashTable = NULL; | 204 m_pHashTable = NULL; |
210 } | 205 } |
211 m_nCount = 0; | 206 m_nCount = 0; |
212 m_pFreeList = NULL; | 207 m_pFreeList = NULL; |
213 m_pBlocks->FreeDataChain(m_pAllocator); | 208 m_pBlocks->FreeDataChain(); |
214 m_pBlocks = NULL; | 209 m_pBlocks = NULL; |
215 } | 210 } |
216 CFX_MapByteStringToPtr::~CFX_MapByteStringToPtr() | 211 CFX_MapByteStringToPtr::~CFX_MapByteStringToPtr() |
217 { | 212 { |
218 RemoveAll(); | 213 RemoveAll(); |
219 ASSERT(m_nCount == 0); | 214 ASSERT(m_nCount == 0); |
220 } | 215 } |
221 void CFX_MapByteStringToPtr::GetNextAssoc(FX_POSITION& rNextPosition, | 216 void CFX_MapByteStringToPtr::GetNextAssoc(FX_POSITION& rNextPosition, |
222 CFX_ByteString& rKey, void*& rValue) const | 217 CFX_ByteString& rKey, void*& rValue) const |
223 { | 218 { |
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
279 pAssoc->key = key; | 274 pAssoc->key = key; |
280 pAssoc->pNext = m_pHashTable[nHash]; | 275 pAssoc->pNext = m_pHashTable[nHash]; |
281 m_pHashTable[nHash] = pAssoc; | 276 m_pHashTable[nHash] = pAssoc; |
282 } | 277 } |
283 return pAssoc->value; | 278 return pAssoc->value; |
284 } | 279 } |
285 CFX_MapByteStringToPtr::CAssoc* | 280 CFX_MapByteStringToPtr::CAssoc* |
286 CFX_MapByteStringToPtr::NewAssoc() | 281 CFX_MapByteStringToPtr::NewAssoc() |
287 { | 282 { |
288 if (m_pFreeList == NULL) { | 283 if (m_pFreeList == NULL) { |
289 CFX_Plex* newBlock = CFX_Plex::Create(m_pAllocator, m_pBlocks, m_nBlockS
ize, sizeof(CFX_MapByteStringToPtr::CAssoc)); | 284 CFX_Plex* newBlock = CFX_Plex::Create(m_pBlocks, m_nBlockSize, sizeof(CF
X_MapByteStringToPtr::CAssoc)); |
290 CFX_MapByteStringToPtr::CAssoc* pAssoc = (CFX_MapByteStringToPtr::CAssoc
*)newBlock->data(); | 285 CFX_MapByteStringToPtr::CAssoc* pAssoc = (CFX_MapByteStringToPtr::CAssoc
*)newBlock->data(); |
291 pAssoc += m_nBlockSize - 1; | 286 pAssoc += m_nBlockSize - 1; |
292 for (int i = m_nBlockSize - 1; i >= 0; i--, pAssoc--) { | 287 for (int i = m_nBlockSize - 1; i >= 0; i--, pAssoc--) { |
293 pAssoc->pNext = m_pFreeList; | 288 pAssoc->pNext = m_pFreeList; |
294 m_pFreeList = pAssoc; | 289 m_pFreeList = pAssoc; |
295 } | 290 } |
296 } | 291 } |
297 ASSERT(m_pFreeList != NULL); | 292 ASSERT(m_pFreeList != NULL); |
298 CFX_MapByteStringToPtr::CAssoc* pAssoc = m_pFreeList; | 293 CFX_MapByteStringToPtr::CAssoc* pAssoc = m_pFreeList; |
299 m_pFreeList = m_pFreeList->pNext; | 294 m_pFreeList = m_pFreeList->pNext; |
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
338 } | 333 } |
339 rValue = pAssoc->value; | 334 rValue = pAssoc->value; |
340 return TRUE; | 335 return TRUE; |
341 } | 336 } |
342 void CFX_MapByteStringToPtr::InitHashTable( | 337 void CFX_MapByteStringToPtr::InitHashTable( |
343 FX_DWORD nHashSize, FX_BOOL bAllocNow) | 338 FX_DWORD nHashSize, FX_BOOL bAllocNow) |
344 { | 339 { |
345 ASSERT(m_nCount == 0); | 340 ASSERT(m_nCount == 0); |
346 ASSERT(nHashSize > 0); | 341 ASSERT(nHashSize > 0); |
347 if (m_pHashTable != NULL) { | 342 if (m_pHashTable != NULL) { |
348 FX_Allocator_Free(m_pAllocator, m_pHashTable); | 343 FX_Free(m_pHashTable); |
349 m_pHashTable = NULL; | 344 m_pHashTable = NULL; |
350 } | 345 } |
351 if (bAllocNow) { | 346 if (bAllocNow) { |
352 m_pHashTable = FX_Allocator_Alloc(m_pAllocator, CAssoc*, nHashSize); | 347 m_pHashTable = FX_Alloc(CAssoc*, nHashSize); |
353 if (m_pHashTable) { | |
354 FXSYS_memset32(m_pHashTable, 0, sizeof(CAssoc*) * nHashSize); | |
355 } | |
356 } | 348 } |
357 m_nHashTableSize = nHashSize; | 349 m_nHashTableSize = nHashSize; |
358 } | 350 } |
359 inline FX_DWORD CFX_MapByteStringToPtr::HashKey(FX_BSTR key) const | 351 inline FX_DWORD CFX_MapByteStringToPtr::HashKey(FX_BSTR key) const |
360 { | 352 { |
361 FX_DWORD nHash = 0; | 353 FX_DWORD nHash = 0; |
362 int len = key.GetLength(); | 354 int len = key.GetLength(); |
363 FX_LPCBYTE buf = key; | 355 FX_LPCBYTE buf = key; |
364 for (int i = 0; i < len; i ++) { | 356 for (int i = 0; i < len; i ++) { |
365 nHash = (nHash << 5) + nHash + buf[i]; | 357 nHash = (nHash << 5) + nHash + buf[i]; |
(...skipping 18 matching lines...) Expand all Loading... |
384 } | 376 } |
385 return FALSE; | 377 return FALSE; |
386 } | 378 } |
387 struct _CompactString { | 379 struct _CompactString { |
388 FX_BYTE m_CompactLen; | 380 FX_BYTE m_CompactLen; |
389 FX_BYTE m_LenHigh; | 381 FX_BYTE m_LenHigh; |
390 FX_BYTE m_LenLow; | 382 FX_BYTE m_LenLow; |
391 FX_BYTE m_Unused; | 383 FX_BYTE m_Unused; |
392 FX_LPBYTE m_pBuffer; | 384 FX_LPBYTE m_pBuffer; |
393 }; | 385 }; |
394 static void _CompactStringRelease(IFX_Allocator* pAllocator, _CompactString* pCo
mpact) | 386 static void _CompactStringRelease(_CompactString* pCompact) |
395 { | 387 { |
396 if (pCompact->m_CompactLen == 0xff) { | 388 if (pCompact->m_CompactLen == 0xff) { |
397 FX_Allocator_Free(pAllocator, pCompact->m_pBuffer); | 389 FX_Free(pCompact->m_pBuffer); |
398 } | 390 } |
399 } | 391 } |
400 static FX_BOOL _CompactStringSame(_CompactString* pCompact, FX_LPCBYTE pStr, int
len) | 392 static FX_BOOL _CompactStringSame(_CompactString* pCompact, FX_LPCBYTE pStr, int
len) |
401 { | 393 { |
402 if (len < sizeof(_CompactString)) { | 394 if (len < sizeof(_CompactString)) { |
403 if (pCompact->m_CompactLen != len) { | 395 if (pCompact->m_CompactLen != len) { |
404 return FALSE; | 396 return FALSE; |
405 } | 397 } |
406 return FXSYS_memcmp32(&pCompact->m_LenHigh, pStr, len) == 0; | 398 return FXSYS_memcmp32(&pCompact->m_LenHigh, pStr, len) == 0; |
407 } | 399 } |
408 if (pCompact->m_CompactLen != 0xff || pCompact->m_LenHigh * 256 + pCompact->
m_LenLow != len) { | 400 if (pCompact->m_CompactLen != 0xff || pCompact->m_LenHigh * 256 + pCompact->
m_LenLow != len) { |
409 return FALSE; | 401 return FALSE; |
410 } | 402 } |
411 return FXSYS_memcmp32(pCompact->m_pBuffer, pStr, len) == 0; | 403 return FXSYS_memcmp32(pCompact->m_pBuffer, pStr, len) == 0; |
412 } | 404 } |
413 static void _CompactStringStore(IFX_Allocator* pAllocator, _CompactString* pComp
act, FX_LPCBYTE pStr, int len) | 405 static void _CompactStringStore(_CompactString* pCompact, FX_LPCBYTE pStr, int l
en) |
414 { | 406 { |
415 if (len < (int)sizeof(_CompactString)) { | 407 if (len < (int)sizeof(_CompactString)) { |
416 pCompact->m_CompactLen = (FX_BYTE)len; | 408 pCompact->m_CompactLen = (FX_BYTE)len; |
417 FXSYS_memcpy32(&pCompact->m_LenHigh, pStr, len); | 409 FXSYS_memcpy32(&pCompact->m_LenHigh, pStr, len); |
418 return; | 410 return; |
419 } | 411 } |
420 pCompact->m_CompactLen = 0xff; | 412 pCompact->m_CompactLen = 0xff; |
421 pCompact->m_LenHigh = len / 256; | 413 pCompact->m_LenHigh = len / 256; |
422 pCompact->m_LenLow = len % 256; | 414 pCompact->m_LenLow = len % 256; |
423 pCompact->m_pBuffer = FX_Allocator_Alloc(pAllocator, FX_BYTE, len); | 415 pCompact->m_pBuffer = FX_Alloc(FX_BYTE, len); |
424 if (pCompact->m_pBuffer) { | 416 if (pCompact->m_pBuffer) { |
425 FXSYS_memcpy32(pCompact->m_pBuffer, pStr, len); | 417 FXSYS_memcpy32(pCompact->m_pBuffer, pStr, len); |
426 } | 418 } |
427 } | 419 } |
428 static CFX_ByteStringC _CompactStringGet(_CompactString* pCompact) | 420 static CFX_ByteStringC _CompactStringGet(_CompactString* pCompact) |
429 { | 421 { |
430 if (pCompact->m_CompactLen == 0xff) { | 422 if (pCompact->m_CompactLen == 0xff) { |
431 return CFX_ByteStringC(pCompact->m_pBuffer, pCompact->m_LenHigh * 256 +
pCompact->m_LenLow); | 423 return CFX_ByteStringC(pCompact->m_pBuffer, pCompact->m_LenHigh * 256 +
pCompact->m_LenLow); |
432 } | 424 } |
433 if (pCompact->m_CompactLen == 0xfe) { | 425 if (pCompact->m_CompactLen == 0xfe) { |
434 return CFX_ByteStringC(); | 426 return CFX_ByteStringC(); |
435 } | 427 } |
436 return CFX_ByteStringC(&pCompact->m_LenHigh, pCompact->m_CompactLen); | 428 return CFX_ByteStringC(&pCompact->m_LenHigh, pCompact->m_CompactLen); |
437 } | 429 } |
438 #define CMAP_ALLOC_STEP 8 | 430 #define CMAP_ALLOC_STEP 8 |
439 #define CMAP_INDEX_SIZE 8 | 431 #define CMAP_INDEX_SIZE 8 |
440 CFX_CMapByteStringToPtr::CFX_CMapByteStringToPtr(IFX_Allocator* pAllocator) | 432 CFX_CMapByteStringToPtr::CFX_CMapByteStringToPtr() |
441 : m_Buffer(sizeof(_CompactString) + sizeof(void*), CMAP_ALLOC_STEP, CMAP_IND
EX_SIZE, pAllocator) | 433 : m_Buffer(sizeof(_CompactString) + sizeof(void*), CMAP_ALLOC_STEP, CMAP_IND
EX_SIZE) |
442 { | 434 { |
443 } | 435 } |
444 CFX_CMapByteStringToPtr::~CFX_CMapByteStringToPtr() | 436 CFX_CMapByteStringToPtr::~CFX_CMapByteStringToPtr() |
445 { | 437 { |
446 RemoveAll(); | 438 RemoveAll(); |
447 } | 439 } |
448 void CFX_CMapByteStringToPtr::RemoveAll() | 440 void CFX_CMapByteStringToPtr::RemoveAll() |
449 { | 441 { |
450 IFX_Allocator* pAllocator = m_Buffer.m_pAllocator; | |
451 int size = m_Buffer.GetSize(); | 442 int size = m_Buffer.GetSize(); |
452 for (int i = 0; i < size; i ++) { | 443 for (int i = 0; i < size; i++) { |
453 _CompactStringRelease(pAllocator, (_CompactString*)m_Buffer.GetAt(i)); | 444 _CompactStringRelease((_CompactString*)m_Buffer.GetAt(i)); |
454 } | 445 } |
455 m_Buffer.RemoveAll(); | 446 m_Buffer.RemoveAll(); |
456 } | 447 } |
457 FX_POSITION CFX_CMapByteStringToPtr::GetStartPosition() const | 448 FX_POSITION CFX_CMapByteStringToPtr::GetStartPosition() const |
458 { | 449 { |
459 int size = m_Buffer.GetSize(); | 450 int size = m_Buffer.GetSize(); |
460 for (int i = 0; i < size; i ++) { | 451 for (int i = 0; i < size; i ++) { |
461 _CompactString* pKey = (_CompactString*)m_Buffer.GetAt(i); | 452 _CompactString* pKey = (_CompactString*)m_Buffer.GetAt(i); |
462 if (pKey->m_CompactLen != 0xfe) { | 453 if (pKey->m_CompactLen != 0xfe) { |
463 return (FX_POSITION)(FX_UINTPTR)(i + 1); | 454 return (FX_POSITION)(FX_UINTPTR)(i + 1); |
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
526 int index, key_len = key.GetLength(); | 517 int index, key_len = key.GetLength(); |
527 int size = m_Buffer.GetSize(); | 518 int size = m_Buffer.GetSize(); |
528 for (index = 0; index < size; index ++) { | 519 for (index = 0; index < size; index ++) { |
529 _CompactString* pKey = (_CompactString*)m_Buffer.GetAt(index); | 520 _CompactString* pKey = (_CompactString*)m_Buffer.GetAt(index); |
530 if (!_CompactStringSame(pKey, (FX_LPCBYTE)key, key_len)) { | 521 if (!_CompactStringSame(pKey, (FX_LPCBYTE)key, key_len)) { |
531 continue; | 522 continue; |
532 } | 523 } |
533 *(void**)(pKey + 1) = value; | 524 *(void**)(pKey + 1) = value; |
534 return; | 525 return; |
535 } | 526 } |
536 IFX_Allocator* pAllocator = m_Buffer.m_pAllocator; | |
537 for (index = 0; index < size; index ++) { | 527 for (index = 0; index < size; index ++) { |
538 _CompactString* pKey = (_CompactString*)m_Buffer.GetAt(index); | 528 _CompactString* pKey = (_CompactString*)m_Buffer.GetAt(index); |
539 if (pKey->m_CompactLen) { | 529 if (pKey->m_CompactLen) { |
540 continue; | 530 continue; |
541 } | 531 } |
542 _CompactStringStore(pAllocator, pKey, (FX_LPCBYTE)key, key_len); | 532 _CompactStringStore(pKey, (FX_LPCBYTE)key, key_len); |
543 *(void**)(pKey + 1) = value; | 533 *(void**)(pKey + 1) = value; |
544 return; | 534 return; |
545 } | 535 } |
546 _CompactString* pKey = (_CompactString*)m_Buffer.Add(); | 536 _CompactString* pKey = (_CompactString*)m_Buffer.Add(); |
547 _CompactStringStore(pAllocator, pKey, (FX_LPCBYTE)key, key_len); | 537 _CompactStringStore(pKey, (FX_LPCBYTE)key, key_len); |
548 *(void**)(pKey + 1) = value; | 538 *(void**)(pKey + 1) = value; |
549 } | 539 } |
550 void CFX_CMapByteStringToPtr::AddValue(FX_BSTR key, void* value) | 540 void CFX_CMapByteStringToPtr::AddValue(FX_BSTR key, void* value) |
551 { | 541 { |
552 ASSERT(value != NULL); | 542 ASSERT(value != NULL); |
553 _CompactString* pKey = (_CompactString*)m_Buffer.Add(); | 543 _CompactString* pKey = (_CompactString*)m_Buffer.Add(); |
554 _CompactStringStore(m_Buffer.m_pAllocator, pKey, (FX_LPCBYTE)key, key.GetLen
gth()); | 544 _CompactStringStore(pKey, (FX_LPCBYTE)key, key.GetLength()); |
555 *(void**)(pKey + 1) = value; | 545 *(void**)(pKey + 1) = value; |
556 } | 546 } |
557 void CFX_CMapByteStringToPtr::RemoveKey(FX_BSTR key) | 547 void CFX_CMapByteStringToPtr::RemoveKey(FX_BSTR key) |
558 { | 548 { |
559 int key_len = key.GetLength(); | 549 int key_len = key.GetLength(); |
560 IFX_Allocator* pAllocator = m_Buffer.m_pAllocator; | |
561 int size = m_Buffer.GetSize(); | 550 int size = m_Buffer.GetSize(); |
562 for (int index = 0; index < size; index ++) { | 551 for (int index = 0; index < size; index++) { |
563 _CompactString* pKey = (_CompactString*)m_Buffer.GetAt(index); | 552 _CompactString* pKey = (_CompactString*)m_Buffer.GetAt(index); |
564 if (!_CompactStringSame(pKey, (FX_LPCBYTE)key, key_len)) { | 553 if (!_CompactStringSame(pKey, (FX_LPCBYTE)key, key_len)) { |
565 continue; | 554 continue; |
566 } | 555 } |
567 _CompactStringRelease(pAllocator, pKey); | 556 _CompactStringRelease(pKey); |
568 pKey->m_CompactLen = 0xfe; | 557 pKey->m_CompactLen = 0xfe; |
569 return; | 558 return; |
570 } | 559 } |
571 } | 560 } |
572 int CFX_CMapByteStringToPtr::GetCount() const | 561 int CFX_CMapByteStringToPtr::GetCount() const |
573 { | 562 { |
574 int count = 0; | 563 int count = 0; |
575 int size = m_Buffer.GetSize(); | 564 int size = m_Buffer.GetSize(); |
576 for (int i = 0; i < size; i ++) { | 565 for (int i = 0; i < size; i ++) { |
577 _CompactString* pKey = (_CompactString*)m_Buffer.GetAt(i); | 566 _CompactString* pKey = (_CompactString*)m_Buffer.GetAt(i); |
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
645 buf[mid].value = value; | 634 buf[mid].value = value; |
646 return; | 635 return; |
647 } | 636 } |
648 } | 637 } |
649 m_Buffer.InsertBlock(low * sizeof(_DWordPair), &pair, sizeof(_DWordPair)); | 638 m_Buffer.InsertBlock(low * sizeof(_DWordPair), &pair, sizeof(_DWordPair)); |
650 } | 639 } |
651 void CFX_CMapDWordToDWord::EstimateSize(FX_DWORD size, FX_DWORD grow_by) | 640 void CFX_CMapDWordToDWord::EstimateSize(FX_DWORD size, FX_DWORD grow_by) |
652 { | 641 { |
653 m_Buffer.EstimateSize(size, grow_by); | 642 m_Buffer.EstimateSize(size, grow_by); |
654 } | 643 } |
OLD | NEW |