<commit_before>/// @file Never implement cloning manually anymore by
/// using this header file.
///
/// @author <NAME>
/// @date 25 Sep 2013

#pragma once

#include <cassert>
#include <memory>

namespace cu {

/// Interface class for all clonable objects.
class Clonable
{
public:
    virtual ~Clonable() {}

    std::unique_ptr<Clonable> clone() const
    {
        std::unique_ptr<Clonable> p( doClone() );
        assert( typeid(*p) == typeid(*this) );
        return p;
    }

private:
    virtual Clonable * doClone() const = 0;<commit_msg>Changed documentation in cloning.h. (Minor change)<commit_after>/// @file Never implement cloning manually anymore by
/// using this header file.
///
/// @author <NAME>
/// @date 25 Sep 2013

#pragma once

#include <cassert>
#include <memory>

namespace cu {

/// Interface base class for all clonable objects.
class Clonable
{
public:
    virtual ~Clonable() {}

    std::unique_ptr<Clonable> clone() const
    {
        std::unique_ptr<Clonable> p( doClone() );
        assert( typeid(*p) == typeid(*this) );
        return p;
    }

private:
    virtual Clonable * doClone() const = 0;
{'fraction_non_alphanumeric': 0.14109347442680775, 'fraction_numerical': 0.012345679012345678, 'mean_word_length': 2.982456140350877, 'pattern_counts': {'":': 0, '<': 13, '<?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': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '848441', 'n_tokens_mistral': 380, 'n_tokens_neox': 358, 'n_words': 113}