proconlib

This documentation is automatically generated by online-judge-tools/verification-helper

View the Project on GitHub KodamaD/proconlib

:warning: utility/subsets.cpp

Depends on

Code

#pragma once
#include <variant>
#include "int_alias.cpp"

class SubsetScanner {
    struct Iter {
        u64 s, t;
        explicit constexpr Iter(const u64 s, const u64 t) noexcept : s(s), t(t) {}
        constexpr bool operator!=(std::monostate) const noexcept { return ~t != 0; }
        constexpr void operator++() noexcept { t -= 1; }
        constexpr u64 operator*() noexcept { return t &= s; }
    };
    u64 s;

  public:
    explicit constexpr SubsetScanner(u64 s) noexcept : s(s) {}
    constexpr Iter begin() const noexcept { return Iter(s, s); }
    constexpr std::monostate end() const noexcept { return {}; }
};

constexpr SubsetScanner subsets(const u64 set) noexcept { return SubsetScanner(set); }
#line 2 "utility/subsets.cpp"
#include <variant>
#line 2 "utility/int_alias.cpp"
#include <cstdint>

using i32 = std::int32_t;
using u32 = std::uint32_t;
using i64 = std::int64_t;
using u64 = std::uint64_t;
using i128 = __int128_t;
using u128 = __uint128_t;
#line 4 "utility/subsets.cpp"

class SubsetScanner {
    struct Iter {
        u64 s, t;
        explicit constexpr Iter(const u64 s, const u64 t) noexcept : s(s), t(t) {}
        constexpr bool operator!=(std::monostate) const noexcept { return ~t != 0; }
        constexpr void operator++() noexcept { t -= 1; }
        constexpr u64 operator*() noexcept { return t &= s; }
    };
    u64 s;

  public:
    explicit constexpr SubsetScanner(u64 s) noexcept : s(s) {}
    constexpr Iter begin() const noexcept { return Iter(s, s); }
    constexpr std::monostate end() const noexcept { return {}; }
};

constexpr SubsetScanner subsets(const u64 set) noexcept { return SubsetScanner(set); }
Back to top page