<commit_before>#pragma once

#include <utility>

class Updater {
public:
    static bool NewerVersionAvailable();
    static std::pair<int, int> MainAppVersion();

private:
    static std::pair<int, int> RemoteVersion();

};<commit_msg>Add updater class documentation<commit_after>#pragma once

#include <utility>

/// <summary>
/// Handles update functionality: checking for updates online, and downloading
/// new versions of the software.
/// <p>
/// The latest version number of 3RVX can be retrieved from:
/// http://matthew.malensek.net/projects/3RVX/latest_version
/// <p>
/// Versions can be downloaded from:
/// http://matthew.malensek.net/projects/3RVX/3RVX-X.Y.{zip, msi}
/// Where X is the major version, Y is the minor version, and the type of
/// installation is determined by the package extension:
/// <ul>
///   <li>.msi - Installer based version</li>
///   <li>.zip - Portable (non-installer) version</li>
/// </ul>
/// </summary>
class Updater {
public:
    /// <summary>
    /// Determines whether a new version of the program is available online
    /// or not.
    /// </summary>
    static bool NewerVersionAvailable();

    /// <summary>
    /// Retrieves the version number of the main app (3RVX.exe).
    /// </summary>
    static std::pair<int, int> MainAppVersion();

private:
    /// <summary>
    /// Retrieves the latest version of the program availabile online.
    /// </summary>
    static std::pair<int, int> RemoteVersion();

};
{'fraction_non_alphanumeric': 0.15163934426229508, 'fraction_numerical': 0.0034153005464480873, 'mean_word_length': 3.0027322404371586, 'pattern_counts': {'":': 0, '<': 25, '<?xml version=': 0, '>': 25, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 2, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '293366', 'n_tokens_mistral': 450, 'n_tokens_neox': 444, 'n_words': 146}