<commit_before>#pragma once

#include <cstdint>
#include <ctime>
#include <initializer_list>
#include <unordered_map>
#include <iterator>
#include <stdexcept>

#include <boost/mpl/contains.hpp>
#include <boost/mpl/vector.hpp>
#include <boost/variant.hpp>

#include "blackhole/attribute/name.hpp"
#include "blackhole/attribute/scope.hpp"
#include "blackhole/attribute/traits.hpp"
#include "blackhole/attribute/value.hpp"

#include "blackhole/platform/initializer_list.hpp"
#include "utils/timeval.hpp"
#include "utils/types.hpp"
#include "utils/underlying.hpp"
#include "blackhole/utils/noexcept.hpp"

namespace blackhole {

struct attribute_t {
    attribute_value_t value;
    attribute::scope scope;

    attribute_t() :
        value(std::uint8_t(0)),
        scope(attribute::DEFAULT_SCOPE)
    {}

    attribute_t(const attribute_value_t& value, attribute::scope type = attribute::DEFAULT_SCOPE) :
        value(value),
        scope(type)
    {}

    attribute_t(attribute_value_t&& value, attribute::scope type = attribute::DEFAULT_SCOPE) :
        value(std::move(value)),
        scope(type)
    {}<commit_msg>[Tasks] Genius idea, wow!<commit_after>#pragma once

#include <cstdint>
#include <ctime>
#include <initializer_list>
#include <unordered_map>
#include <iterator>
#include <stdexcept>

#include <boost/mpl/contains.hpp>
#include <boost/mpl/vector.hpp>
#include <boost/variant.hpp>

#include "blackhole/attribute/name.hpp"
#include "blackhole/attribute/scope.hpp"
#include "blackhole/attribute/traits.hpp"
#include "blackhole/attribute/value.hpp"

#include "blackhole/platform/initializer_list.hpp"
#include "utils/timeval.hpp"
#include "utils/types.hpp"
#include "utils/underlying.hpp"
#include "blackhole/utils/noexcept.hpp"

namespace blackhole {

//!@todo: Now I keep multiple attribute sets in single view class. Seems, there
//!       is no need for this class anymore, cause attribute groups can be
//!       received from view class explicitly (without that freaking iterate
//!       over ALL attributes).
struct attribute_t {
    attribute_value_t value;
    attribute::scope scope;

    attribute_t() :
        value(std::uint8_t(0)),
        scope(attribute::DEFAULT_SCOPE)
    {}

    attribute_t(const attribute_value_t& value, attribute::scope type = attribute::DEFAULT_SCOPE) :
        value(value),
        scope(type)
    {}

    attribute_t(attribute_value_t&& value, attribute::scope type = attribute::DEFAULT_SCOPE) :
        value(std::move(value)),
        scope(type)
    {}
{'fraction_non_alphanumeric': 0.12967382657120127, 'fraction_numerical': 0.0015910898965791568, 'mean_word_length': 4.467391304347826, 'pattern_counts': {'":': 0, '<': 21, '<?xml version=': 0, '>': 21, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '4982562', 'n_tokens_mistral': 815, 'n_tokens_neox': 788, 'n_words': 168}