mirror of
https://github.com/dart-lang/sdk
synced 2024-09-18 21:41:19 +00:00
43 lines
1.2 KiB
C++
43 lines
1.2 KiB
C++
// Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
|
|
// for details. All rights reserved. Use of this source code is governed by a
|
|
// BSD-style license that can be found in the LICENSE file.
|
|
|
|
#ifndef RUNTIME_VM_BOOLFIELD_H_
|
|
#define RUNTIME_VM_BOOLFIELD_H_
|
|
|
|
#include "platform/assert.h"
|
|
#include "vm/globals.h"
|
|
|
|
namespace dart {
|
|
|
|
// BoolField is a template for encoding and decoding a bit inside an
|
|
// unsigned machine word.
|
|
template <int position>
|
|
class BoolField {
|
|
public:
|
|
// Returns a uword with the bool value encoded.
|
|
static uword encode(bool value) {
|
|
ASSERT(position < sizeof(uword));
|
|
return static_cast<uword>((value ? 1U : 0) << position);
|
|
}
|
|
|
|
// Extracts the bool from the value.
|
|
static bool decode(uword value) {
|
|
ASSERT(position < sizeof(uword));
|
|
return (value & (1U << position)) != 0;
|
|
}
|
|
|
|
// Returns a uword with the bool field value encoded based on the
|
|
// original value. Only the single bit corresponding to this bool
|
|
// field will be changed.
|
|
static uword update(bool value, uword original) {
|
|
ASSERT(position < sizeof(uword));
|
|
const uword mask = 1U << position;
|
|
return value ? original | mask : original & ~mask;
|
|
}
|
|
};
|
|
|
|
} // namespace dart
|
|
|
|
#endif // RUNTIME_VM_BOOLFIELD_H_
|