Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 2a249a79 authored by Treehugger Robot's avatar Treehugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Easier ftl::Flags construction" into main

parents d7e9d2ac 83c6f9ee
Loading
Loading
Loading
Loading
+10 −0
Original line number Diff line number Diff line
@@ -22,6 +22,7 @@
#include <bitset>
#include <cstdint>
#include <iterator>
#include <initializer_list>
#include <string>
#include <type_traits>

@@ -40,6 +41,7 @@ class Flags {

public:
    constexpr Flags(F f) : mFlags(static_cast<U>(f)) {}
    constexpr Flags(std::initializer_list<F> fs) : mFlags(combine(fs)) {}
    constexpr Flags() : mFlags(0) {}
    constexpr Flags(const Flags<F>& f) : mFlags(f.mFlags) {}

@@ -197,6 +199,14 @@ public:
private:
    U mFlags;

    static constexpr U combine(std::initializer_list<F> fs) {
        U result = 0;
        for (const F f : fs) {
            result |= static_cast<U>(f);
        }
        return result;
    }

    static void appendFlag(std::string& str, const std::string_view& flag, bool& first) {
        if (first) {
            first = false;
+13 −1
Original line number Diff line number Diff line
@@ -17,7 +17,7 @@
#include <ftl/flags.h>
#include <gtest/gtest.h>

#include <type_traits>
#include <initializer_list>

namespace android::test {

@@ -59,6 +59,18 @@ TEST(Flags, All) {
    ASSERT_FALSE(flags.all(TestFlags::ONE | TestFlags::TWO | TestFlags::THREE));
}

TEST(Flags, ImplicitConstructionAndAssignmentFromInitializerList) {
    Flags<TestFlags> flags = {TestFlags::ONE, TestFlags::THREE};
    ASSERT_TRUE(flags.test(TestFlags::ONE));
    ASSERT_FALSE(flags.test(TestFlags::TWO));
    ASSERT_TRUE(flags.test(TestFlags::THREE));

    flags = {};
    ASSERT_FALSE(flags.test(TestFlags::ONE));
    ASSERT_FALSE(flags.test(TestFlags::TWO));
    ASSERT_FALSE(flags.test(TestFlags::THREE));
}

TEST(Flags, DefaultConstructor_hasNoFlagsSet) {
    Flags<TestFlags> flags;
    ASSERT_FALSE(flags.any(TestFlags::ONE | TestFlags::TWO | TestFlags::THREE));