Commit 8f3f15c3 authored by Peter Kasting's avatar Peter Kasting Committed by Commit Bot

Allow binary literals.

BUG=none
TEST=none

Change-Id: I0b106db267d30d0ab083b107258f0964165917d2
Reviewed-on: https://chromium-review.googlesource.com/855823
Commit-Queue: Peter Kasting <pkasting@chromium.org>
Reviewed-by: default avatarJeremy Roman <jbroman@chromium.org>
Reviewed-by: default avatarDan Erat <derat@chromium.org>
Reviewed-by: default avatarBuck Krasic <ckrasic@chromium.org>
Cr-Commit-Position: refs/heads/master@{#530403}
parent 5f81c6ec
......@@ -65,34 +65,34 @@ const uint8_t kPublicHeaderSequenceNumberShift = 4;
// Masks to determine if the frame type is a special use
// and for specific special frame types.
const uint8_t kQuicFrameTypeSpecialMask = 0xE0; // 0b 11100000
const uint8_t kQuicFrameTypeStreamMask_Pre40 = 0x80;
const uint8_t kQuicFrameTypeStreamMask = 0xC0;
const uint8_t kQuicFrameTypeAckMask_Pre40 = 0x40;
const uint8_t kQuicFrameTypeAckMask = 0xA0;
const uint8_t kQuicFrameTypeSpecialMask = 0b11100000;
const uint8_t kQuicFrameTypeStreamMask_Pre40 = 0b10000000;
const uint8_t kQuicFrameTypeStreamMask = 0b11000000;
const uint8_t kQuicFrameTypeAckMask_Pre40 = 0b01000000;
const uint8_t kQuicFrameTypeAckMask = 0b10100000;
// Stream type format is 11FSSOOD.
// Stream frame relative shifts and masks for interpreting the stream flags.
// StreamID may be 1, 2, 3, or 4 bytes.
const uint8_t kQuicStreamIdShift_Pre40 = 2;
const uint8_t kQuicStreamIDLengthMask_Pre40 = 0x03;
const uint8_t kQuicStreamIDLengthMask_Pre40 = 0b00000011;
const uint8_t kQuicStreamIDLengthShift = 3;
const uint8_t kQuicStreamIDLengthNumBits = 2;
// Offset may be 0, 2, 4, or 8 bytes.
const uint8_t kQuicStreamShift_Pre40 = 3;
const uint8_t kQuicStreamOffsetMask_Pre40 = 0x07;
const uint8_t kQuicStreamOffsetMask_Pre40 = 0b00000111;
const uint8_t kQuicStreamOffsetNumBits = 2;
const uint8_t kQuicStreamOffsetShift = 1;
// Data length may be 0 or 2 bytes.
const uint8_t kQuicStreamDataLengthShift_Pre40 = 1;
const uint8_t kQuicStreamDataLengthMask_Pre40 = 0x01;
const uint8_t kQuicStreamDataLengthMask_Pre40 = 0b00000001;
const uint8_t kQuicStreamDataLengthShift = 0;
// Fin bit may be set or not.
const uint8_t kQuicStreamFinShift_Pre40 = 1;
const uint8_t kQuicStreamFinMask_Pre40 = 0x01;
const uint8_t kQuicStreamFinMask_Pre40 = 0b00000001;
const uint8_t kQuicStreamFinShift = 5;
// packet number size shift used in AckFrames.
......
......@@ -376,14 +376,6 @@ template &lt;typename T&gt;<br/>void Function(T&amp;&amp; t) { ... }</code></td>
<th style='width:240px;'>Notes and Discussion Thread</th>
</tr>
<tr>
<td>Number literal separators</td>
<td><code>float f = 1'000'000.000'1;</code></td>
<td><code>'</code>s anywhere in int or float literals are ignored</td>
<td><a href="http://en.cppreference.com/w/cpp/language/integer_literal">Integer literals</a>, <a href="http://en.cppreference.com/w/cpp/language/floating_literal">Floating point literals</a></td>
<td><a href="https://groups.google.com/a/chromium.org/d/topic/cxx/exS1aGs1wes/discussion">Discussion thread</a></td>
</tr>
<tr>
<td>Aggregate member initialization</td>
<td><code>struct Point { int x, y, z = 0; };<br>Point p = {2, 3};</code></td>
......@@ -392,6 +384,22 @@ template &lt;typename T&gt;<br/>void Function(T&amp;&amp; t) { ... }</code></td>
<td><a href="https://groups.google.com/a/chromium.org/d/topic/cxx/WMBs3K9OQ_E/discussion">Discussion thread</a></td>
</tr>
<tr>
<td>Binary literals</td>
<td><code>int i = 0b1001;</code></td>
<td>Allows defining literals in base two.</td>
<td><a href="http://en.cppreference.com/w/cpp/language/integer_literal">Integer literals</a></td>
<td><a href="https://groups.google.com/a/chromium.org/d/topic/cxx/zsGhgaKLmIk/discussion">Discussion thread</a></td>
</tr>
<tr>
<td>Number literal separators</td>
<td><code>float f = 1'000'000.000'1;</code></td>
<td><code>'</code>s anywhere in int or float literals are ignored</td>
<td><a href="http://en.cppreference.com/w/cpp/language/integer_literal">Integer literals</a>, <a href="http://en.cppreference.com/w/cpp/language/floating_literal">Floating point literals</a></td>
<td><a href="https://groups.google.com/a/chromium.org/d/topic/cxx/exS1aGs1wes/discussion">Discussion thread</a></td>
</tr>
<tr>
<td>Relaxed constant expressions</td>
<td><code>constexpr int Factorial(int n) {<br>&nbsp;&nbsp;int result = 1;<br>&nbsp;&nbsp;while (n > 0)<br>&nbsp;&nbsp;&nbsp;&nbsp;result *= n--;<br>&nbsp;&nbsp;return result;<br>}</code></td>
......@@ -976,15 +984,6 @@ std::move(t).f();&nbsp;&nbsp;// second</code></td>
something, remove all callers and remove the function instead.</td>
</tr>
<tr>
<td>Binary literals</td>
<td><code>int i = 0b1001;</code></td>
<td>Allows defining literals in base two.</td>
<td><a href="http://en.cppreference.com/w/cpp/language/integer_literal">Integer literals</a></td>
<td>Might confuse syntax highlighting in editors. No standard library support
for printing or reading in this format. Still seems useful in minor ways.</td>
</tr>
<tr>
<td><code>decltype(auto)</code> variable declarations</td>
<td><code>decltype(auto) x = 42;</code></td>
......
......@@ -149,17 +149,17 @@ void PutARGBImage(XDisplay* display,
for (int y = 0; y < data_height; ++y) {
for (int x = 0; x < data_width; ++x) {
const uint32_t pixel = *(bitmap_in++);
uint16_t out_pixel = ((pixel >> 8) & 0xf800) |
((pixel >> 5) & 0x07e0) |
((pixel >> 3) & 0x001f);
uint16_t out_pixel = ((pixel >> 8) & 0b1111100000000000) |
((pixel >> 5) & 0b0000011111100000) |
((pixel >> 3) & 0b0000000000011111);
*(bitmap16++) = out_pixel;
}
}
image.data = reinterpret_cast<char*>(orig_bitmap16);
image.red_mask = 0xf800;
image.green_mask = 0x07e0;
image.blue_mask = 0x001f;
image.red_mask = 0b1111100000000000;
image.green_mask = 0b0000011111100000;
image.blue_mask = 0b0000000000011111;
XPutImage(display, pixmap, static_cast<GC>(pixmap_gc), &image,
src_x, src_y, dst_x, dst_y,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment