Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1406)

Side by Side Diff: core/src/fxcrt/fx_basic_maps.cpp

Issue 1289703003: FX_CMapDwordToDword considered harmful. (Closed) Base URL: https://pdfium.googlesource.com/pdfium.git@master
Patch Set: Rebase, remove if(). Created 5 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « core/src/fpdfapi/fpdf_parser/fpdf_parser_parser.cpp ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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_basic.h" 7 #include "../../include/fxcrt/fx_basic.h"
8 #include "plex.h" 8 #include "plex.h"
9 9
10 CFX_MapPtrToPtr::CFX_MapPtrToPtr(int nBlockSize) 10 CFX_MapPtrToPtr::CFX_MapPtrToPtr(int nBlockSize)
(...skipping 330 matching lines...) Expand 10 before | Expand all | Expand 10 after
341 int count = 0; 341 int count = 0;
342 int size = m_Buffer.GetSize(); 342 int size = m_Buffer.GetSize();
343 for (int i = 0; i < size; i++) { 343 for (int i = 0; i < size; i++) {
344 _CompactString* pKey = (_CompactString*)m_Buffer.GetAt(i); 344 _CompactString* pKey = (_CompactString*)m_Buffer.GetAt(i);
345 if (pKey->m_CompactLen != 0xfe) { 345 if (pKey->m_CompactLen != 0xfe) {
346 count++; 346 count++;
347 } 347 }
348 } 348 }
349 return count; 349 return count;
350 } 350 }
351 extern "C" {
352 static int _CompareDWord(const void* p1, const void* p2) {
353 return (*(FX_DWORD*)p1) - (*(FX_DWORD*)p2);
354 }
355 };
356 struct _DWordPair {
357 FX_DWORD key;
358 FX_DWORD value;
359 };
360 FX_BOOL CFX_CMapDWordToDWord::Lookup(FX_DWORD key, FX_DWORD& value) const {
361 void* pResult = FXSYS_bsearch(&key, m_Buffer.GetBuffer(),
362 m_Buffer.GetSize() / sizeof(_DWordPair),
363 sizeof(_DWordPair), _CompareDWord);
364 if (pResult == NULL) {
365 return FALSE;
366 }
367 value = ((FX_DWORD*)pResult)[1];
368 return TRUE;
369 }
370 FX_POSITION CFX_CMapDWordToDWord::GetStartPosition() const {
371 FX_DWORD count = m_Buffer.GetSize() / sizeof(_DWordPair);
372 if (count == 0) {
373 return NULL;
374 }
375 return (FX_POSITION)1;
376 }
377 void CFX_CMapDWordToDWord::GetNextAssoc(FX_POSITION& pos,
378 FX_DWORD& key,
379 FX_DWORD& value) const {
380 if (pos == 0) {
381 return;
382 }
383 FX_DWORD index = ((FX_DWORD)(uintptr_t)pos) - 1;
384 FX_DWORD count = m_Buffer.GetSize() / sizeof(_DWordPair);
385 _DWordPair* buf = (_DWordPair*)m_Buffer.GetBuffer();
386 key = buf[index].key;
387 value = buf[index].value;
388 if (index == count - 1) {
389 pos = 0;
390 } else {
391 pos = (FX_POSITION)((uintptr_t)pos + 1);
392 }
393 }
394 void CFX_CMapDWordToDWord::SetAt(FX_DWORD key, FX_DWORD value) {
395 FX_DWORD count = m_Buffer.GetSize() / sizeof(_DWordPair);
396 _DWordPair* buf = (_DWordPair*)m_Buffer.GetBuffer();
397 _DWordPair pair = {key, value};
398 if (count == 0 || key > buf[count - 1].key) {
399 m_Buffer.AppendBlock(&pair, sizeof(_DWordPair));
400 return;
401 }
402 int low = 0, high = count - 1;
403 while (low <= high) {
404 int mid = (low + high) / 2;
405 if (buf[mid].key < key) {
406 low = mid + 1;
407 } else if (buf[mid].key > key) {
408 high = mid - 1;
409 } else {
410 buf[mid].value = value;
411 return;
412 }
413 }
414 m_Buffer.InsertBlock(low * sizeof(_DWordPair), &pair, sizeof(_DWordPair));
415 }
416 void CFX_CMapDWordToDWord::EstimateSize(FX_DWORD size, FX_DWORD grow_by) {
417 m_Buffer.EstimateSize(size, grow_by);
418 }
OLDNEW
« no previous file with comments | « core/src/fpdfapi/fpdf_parser/fpdf_parser_parser.cpp ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698