<commit_before>#ifndef AX_BASIC_OBJ_MODEL_HPP
#define AX_BASIC_OBJ_MODEL_HPP

#include <vector>
#include <string>
#include <iosfwd>

#include "math.hpp"
#include "option.hpp"
#include "basic_buffer.hpp"

namespace ax
{
    struct basic_vertex
    {
        ax::v3 vertex;
        ax::v3 normal;
        ax::v2 uv;
    };

    struct basic_obj_model
    {
    public:

        basic_obj_model(const char *file_path);
        ~basic_obj_model();

        int get_vertex_count() const;
        int get_face_count() const;
        ax::v3 get_normal(int iface, int nthvert) const;
        ax::v3 get_normal(ax::v2 uv) const;
        ax::v3 get_vertex(int i) const;
        ax::v3 get_vertex(int iface, int nthvert) const;
        ax::v2 get_uv(int iface, int nthvert) const;
        ax::color get_color_diffuse(ax::v2 uv) const;
        float get_specularity(ax::v2 uv) const;
        std::vector<int> get_face(int idx) const;

    private:<commit_msg>Exposed model maps and added TODOs to decouple operations from basic_obj_model.<commit_after>#ifndef AX_BASIC_OBJ_MODEL_HPP
#define AX_BASIC_OBJ_MODEL_HPP

#include <vector>
#include <string>
#include <iosfwd>

#include "math.hpp"
#include "option.hpp"
#include "basic_buffer.hpp"

namespace ax
{
    struct basic_vertex
    {
        ax::v3 vertex;
        ax::v3 normal;
        ax::v2 uv;
    };

    struct basic_obj_model
    {
    public:

        basic_obj_model(const char *file_path);
        ~basic_obj_model();

        int get_vertex_count() const;
        int get_face_count() const;
        ax::v3 get_normal(int iface, int nthvert) const; // TODO: move this to math.hpp?
        ax::v3 get_normal(ax::v2 uv) const; // TODO: move this to math.hpp?
        ax::v3 get_vertex(int i) const;
        ax::v3 get_vertex(int iface, int nthvert) const; // TODO: move this to math.hpp?
        ax::v2 get_uv(int iface, int nthvert) const; // TODO: move this to math.hpp?
        ax::color get_color_diffuse(ax::v2 uv) const; // TODO: move this to math.hpp
        float get_specularity(ax::v2 uv) const; // TODO: move this to math.hpp
        std::vector<int> get_face(int idx) const;
		const ax::basic_buffer& get_diffuse_map() const { return diffuse_map; }
		const ax::basic_buffer& get_normal_map() const { return normal_map; }
		const ax::basic_buffer& get_specular_map() const { return specular_map; }

    private:
{'fraction_non_alphanumeric': 0.11087689713322091, 'fraction_numerical': 0.00927487352445194, 'mean_word_length': 3.1341463414634148, 'pattern_counts': {'":': 0, '<': 11, '<?xml version=': 0, '>': 11, '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': '3197713', 'n_tokens_mistral': 865, 'n_tokens_neox': 827, 'n_words': 213}