#pragma once

#include "Types.h"

namespace ehs
{
    /// A helper class for storing version major, minor and patch.
	class EHS_LIB_IO Version
	{
	public:
		UInt_32 major;
		UInt_32 minor;
		UInt_32 patch;

        /// Default members initialization.
		Version();

        /// Initializes members with given major, minor and patch.
        /// @param [in] major The major version.
        /// @param [in] minor The minor version.
        /// @param [in] patch The patch version.
		Version(const UInt_32 major, const UInt_32 minor, const UInt_32 patch);

        /// Copies all members from the given version object.
        /// @param [in] version The version object to copy from.
		Version(const Version& version);

        /// Copies all members from the given version object.
        /// @param [in] version The version object to copy from.
        /// @returns The version object that has been assigned to.
		Version& operator=(const Version& version);

        bool operator==(const Version& version) const;

        bool operator!=(const Version& version) const;

        unsigned int operator[](const UInt_32 i) const;

        unsigned int& operator[](const UInt_32 i);
	};
}