<commit_before>#pragma once

#include "text.hpp"
#include "nanocv/arch.h"
#include <functional>

namespace ncv
{
        ///
        /// \brief collects & formats for ASCII display tabular data
        ///
        class NANOCV_PUBLIC tabulator_t
        {
        public:

                typedef std::string                     string_t;
                typedef std::vector<string_t>           strings_t;

                typedef std::function
                <
                        bool(const string_t&,
                             const string_t&)
                >                                       comparator_t;

                typedef std::function
                <
                        size_t(const strings_t&)
                >                                       marker_t;

                enum class sorting
                {
                        ascending,
                        descending
                };

                ///
                /// \brief a header in the table
                ///
                class header_t
                {
                public:

                        ///
                        /// \brief append a column value
                        ///
                        template
                        <
                                typename tvalue
                        >
                        header_t& operator<<(tvalue value)<commit_msg>comment<commit_after>#pragma once

#include "text.hpp"
#include "nanocv/arch.h"
#include <functional>

namespace ncv
{
        ///
        /// \brief collects & formats for ASCII display tabular data
        ///
        class NANOCV_PUBLIC tabulator_t
        {
        public:

                typedef std::string                     string_t;
                typedef std::vector<string_t>           strings_t;

                typedef std::function
                <
                        bool(const string_t&,
                             const string_t&)
                >                                       comparator_t;

                ///
                /// \brief return the selected column index from all columns of a row
                ///
                typedef std::function
                <
                        size_t(const strings_t&)
                >                                       marker_t;

                enum class sorting
                {
                        ascending,
                        descending
                };

                ///
                /// \brief a header in the table
                ///
                class header_t
                {
                public:

                        ///
                        /// \brief append a column value
                        ///
                        template
                        <
                                typename tvalue
                        >
                        header_t& operator<<(tvalue value)
{'fraction_non_alphanumeric': 0.06351351351351352, 'fraction_numerical': 0.0, 'mean_word_length': 0.6198030634573304, 'pattern_counts': {'":': 0, '<': 17, '<?xml version=': 0, '>': 13, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 8, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '4182188', 'n_tokens_mistral': 662, 'n_tokens_neox': 569, 'n_words': 141}