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

Side by Side Diff: third_party/WebKit/Source/wtf/ArrayBufferBuilder.cpp

Issue 1611343002: wtf reformat test Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: pydent Created 4 years, 11 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
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2013 Google Inc. All rights reserved. 2 * Copyright (C) 2013 Google Inc. All rights reserved.
3 * 3 *
4 * Redistribution and use in source and binary forms, with or without 4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions are 5 * modification, are permitted provided that the following conditions are
6 * met: 6 * met:
7 * 7 *
8 * * Redistributions of source code must retain the above copyright 8 * * Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer. 9 * notice, this list of conditions and the following disclaimer.
10 * * Redistributions in binary form must reproduce the above 10 * * Redistributions in binary form must reproduce the above
(...skipping 20 matching lines...) Expand all
31 #include "wtf/ArrayBufferBuilder.h" 31 #include "wtf/ArrayBufferBuilder.h"
32 32
33 #include "wtf/Assertions.h" 33 #include "wtf/Assertions.h"
34 #include <limits> 34 #include <limits>
35 35
36 namespace WTF { 36 namespace WTF {
37 37
38 static const int defaultBufferCapacity = 32768; 38 static const int defaultBufferCapacity = 32768;
39 39
40 ArrayBufferBuilder::ArrayBufferBuilder() 40 ArrayBufferBuilder::ArrayBufferBuilder()
41 : m_bytesUsed(0) 41 : m_bytesUsed(0), m_variableCapacity(true) {
42 , m_variableCapacity(true) 42 m_buffer = ArrayBuffer::create(defaultBufferCapacity, 1);
43 {
44 m_buffer = ArrayBuffer::create(defaultBufferCapacity, 1);
45 } 43 }
46 44
47 bool ArrayBufferBuilder::expandCapacity(unsigned sizeToIncrease) 45 bool ArrayBufferBuilder::expandCapacity(unsigned sizeToIncrease) {
48 { 46 unsigned currentBufferSize = m_buffer->byteLength();
49 unsigned currentBufferSize = m_buffer->byteLength();
50 47
51 // If the size of the buffer exceeds max of unsigned, it can't be grown any 48 // If the size of the buffer exceeds max of unsigned, it can't be grown any
52 // more. 49 // more.
53 if (sizeToIncrease > std::numeric_limits<unsigned>::max() - m_bytesUsed) 50 if (sizeToIncrease > std::numeric_limits<unsigned>::max() - m_bytesUsed)
54 return false; 51 return false;
55 52
56 unsigned newBufferSize = m_bytesUsed + sizeToIncrease; 53 unsigned newBufferSize = m_bytesUsed + sizeToIncrease;
57 54
58 // Grow exponentially if possible. 55 // Grow exponentially if possible.
59 unsigned exponentialGrowthNewBufferSize = std::numeric_limits<unsigned>::max (); 56 unsigned exponentialGrowthNewBufferSize =
60 if (currentBufferSize <= std::numeric_limits<unsigned>::max() / 2) 57 std::numeric_limits<unsigned>::max();
61 exponentialGrowthNewBufferSize = currentBufferSize * 2; 58 if (currentBufferSize <= std::numeric_limits<unsigned>::max() / 2)
62 if (exponentialGrowthNewBufferSize > newBufferSize) 59 exponentialGrowthNewBufferSize = currentBufferSize * 2;
63 newBufferSize = exponentialGrowthNewBufferSize; 60 if (exponentialGrowthNewBufferSize > newBufferSize)
61 newBufferSize = exponentialGrowthNewBufferSize;
64 62
65 // Copy existing data in current buffer to new buffer. 63 // Copy existing data in current buffer to new buffer.
66 RefPtr<ArrayBuffer> newBuffer = ArrayBuffer::create(newBufferSize, 1); 64 RefPtr<ArrayBuffer> newBuffer = ArrayBuffer::create(newBufferSize, 1);
67 if (!newBuffer) 65 if (!newBuffer)
68 return false; 66 return false;
69 67
70 memcpy(newBuffer->data(), m_buffer->data(), m_bytesUsed); 68 memcpy(newBuffer->data(), m_buffer->data(), m_bytesUsed);
71 m_buffer = newBuffer; 69 m_buffer = newBuffer;
72 return true; 70 return true;
73 } 71 }
74 72
75 unsigned ArrayBufferBuilder::append(const char* data, unsigned length) 73 unsigned ArrayBufferBuilder::append(const char* data, unsigned length) {
76 { 74 ASSERT(length > 0);
77 ASSERT(length > 0);
78 75
79 unsigned currentBufferSize = m_buffer->byteLength(); 76 unsigned currentBufferSize = m_buffer->byteLength();
80 77
81 ASSERT(m_bytesUsed <= currentBufferSize); 78 ASSERT(m_bytesUsed <= currentBufferSize);
82 79
83 unsigned remainingBufferSpace = currentBufferSize - m_bytesUsed; 80 unsigned remainingBufferSpace = currentBufferSize - m_bytesUsed;
84 81
85 unsigned bytesToSave = length; 82 unsigned bytesToSave = length;
86 83
87 if (length > remainingBufferSpace) { 84 if (length > remainingBufferSpace) {
88 if (m_variableCapacity) { 85 if (m_variableCapacity) {
89 if (!expandCapacity(length)) 86 if (!expandCapacity(length))
90 return 0; 87 return 0;
91 } else { 88 } else {
92 bytesToSave = remainingBufferSpace; 89 bytesToSave = remainingBufferSpace;
93 }
94 } 90 }
91 }
95 92
96 memcpy(static_cast<char*>(m_buffer->data()) + m_bytesUsed, data, bytesToSave ); 93 memcpy(static_cast<char*>(m_buffer->data()) + m_bytesUsed, data, bytesToSave);
97 m_bytesUsed += bytesToSave; 94 m_bytesUsed += bytesToSave;
98 95
99 return bytesToSave; 96 return bytesToSave;
100 } 97 }
101 98
102 PassRefPtr<ArrayBuffer> ArrayBufferBuilder::toArrayBuffer() 99 PassRefPtr<ArrayBuffer> ArrayBufferBuilder::toArrayBuffer() {
103 { 100 // Fully used. Return m_buffer as-is.
104 // Fully used. Return m_buffer as-is. 101 if (m_buffer->byteLength() == m_bytesUsed)
105 if (m_buffer->byteLength() == m_bytesUsed) 102 return m_buffer;
106 return m_buffer;
107 103
108 return m_buffer->slice(0, m_bytesUsed); 104 return m_buffer->slice(0, m_bytesUsed);
109 } 105 }
110 106
111 String ArrayBufferBuilder::toString() 107 String ArrayBufferBuilder::toString() {
112 { 108 return String(static_cast<const char*>(m_buffer->data()), m_bytesUsed);
113 return String(static_cast<const char*>(m_buffer->data()), m_bytesUsed);
114 } 109 }
115 110
116 void ArrayBufferBuilder::shrinkToFit() 111 void ArrayBufferBuilder::shrinkToFit() {
117 { 112 ASSERT(m_bytesUsed <= m_buffer->byteLength());
118 ASSERT(m_bytesUsed <= m_buffer->byteLength());
119 113
120 if (m_buffer->byteLength() > m_bytesUsed) 114 if (m_buffer->byteLength() > m_bytesUsed)
121 m_buffer = m_buffer->slice(0, m_bytesUsed); 115 m_buffer = m_buffer->slice(0, m_bytesUsed);
122 } 116 }
123 117
124 } // namespace WTF 118 } // namespace WTF
OLDNEW
« no previous file with comments | « third_party/WebKit/Source/wtf/ArrayBufferBuilder.h ('k') | third_party/WebKit/Source/wtf/ArrayBufferBuilderTest.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698