<commit_before>#ifndef TERM_H_
#define TERM_H_

/**
 * @file
 * Define the basic types that are used by all terms.
 *
 * @author <EMAIL>
 *
 * @section LICENSE
 * @verbatim
 *       _ _     _
 *   ___| (_)___(_) ___  _ __
 *  / _ \ | / __| |/ _ \| '_ \
 * |  __/ | \__ \ | (_) | | | |
 *  \___|_|_|___/_|\___/|_| |_|
 * The Elision Term Rewriter
 *
 * Copyright (c) 2014 by <NAME> (<EMAIL>)
 * All rights reserved.
 * @endverbatim
 */

#include <string>

namespace elision {
namespace term {

/**
 * Every term can have an associated location, which tells where the term
 * was originally declared.  This can be @b internal, or it can be from a
 * @b file, or it could be from an interactive @b console session.
 *
 * @section using Using
 * Every term has an associated location that is provided during construction.
 * To make a location, do one of the following.
 *   - If the location is from @c file with line number @c line and column
 *     number @c column, then invoke <tt>Loc(file, line, column)</tt>.
 *   - If the location is from a console session with line number @c line and
 *     column number @c column, then invoke <tt>Loc(line, column)</tt>.
 *   - If the term is being created as part of an internal process (such as
 *     the root type) or otherwise has no associated location, then get the
 *     internal location via <tt>Loc::get_internal()</tt>.
 */
class Loc {
public:
    /**
     * Initialize a new instance.  Note that both the line and column numbers
     * are one-based, so zero can be used to indicate that the respective
     * value is not known.<commit_msg>Added missing include.<commit_after>#ifndef TERM_H_
#define TERM_H_

/**
 * @file
 * Define the basic types that are used by all terms.
 *
 * @author <EMAIL>
 *
 * @section LICENSE
 * @verbatim
 *       _ _     _
 *   ___| (_)___(_) ___  _ __
 *  / _ \ | / __| |/ _ \| '_ \
 * |  __/ | \__ \ | (_) | | | |
 *  \___|_|_|___/_|\___/|_| |_|
 * The Elision Term Rewriter
 *
 * Copyright (c) 2014 by <NAME> (<EMAIL>)
 * All rights reserved.
 * @endverbatim
 */

#include <string>
#include <memory>

namespace elision {
namespace term {

/**
 * Every term can have an associated location, which tells where the term
 * was originally declared.  This can be @b internal, or it can be from a
 * @b file, or it could be from an interactive @b console session.
 *
 * @section using Using
 * Every term has an associated location that is provided during construction.
 * To make a location, do one of the following.
 *   - If the location is from @c file with line number @c line and column
 *     number @c column, then invoke <tt>Loc(file, line, column)</tt>.
 *   - If the location is from a console session with line number @c line and
 *     column number @c column, then invoke <tt>Loc(line, column)</tt>.
 *   - If the term is being created as part of an internal process (such as
 *     the root type) or otherwise has no associated location, then get the
 *     internal location via <tt>Loc::get_internal()</tt>.
 */
class Loc {
public:
    /**
     * Initialize a new instance.  Note that both the line and column numbers
     * are one-based, so zero can be used to indicate that the respective
     * value is not known.
{'fraction_non_alphanumeric': 0.10941871308672677, 'fraction_numerical': 0.0024867889337892445, 'mean_word_length': 2.8585131894484412, 'pattern_counts': {'":': 0, '<': 24, '<?xml version=': 0, '>': 24, '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': '3573836', 'n_tokens_mistral': 988, 'n_tokens_neox': 959, 'n_words': 415}