nodes_value_containers.hpp 3.65 KB
Newer Older
1
2
#ifndef NODE_VALUE_ARR
#define NODE_VALUE_ARR
Thomas Purcell's avatar
Thomas Purcell committed
3

Thomas Purcell's avatar
Thomas Purcell committed
4
#include <algorithm>
Thomas Purcell's avatar
Thomas Purcell committed
5
6
7
8
9
10
11
#include <memory>
#include <vector>

#include<utils/enum.hpp>

namespace node_value_arrs
{
Thomas Purcell's avatar
Thomas Purcell committed
12
13
14
    extern int N_SAMPLES; //!< Number of samples in the nodes
    extern int N_STORE_FEATURES; //!< Number of features with stored values
    extern int N_RUNGS_STORED; //!< Number of rungs with values stored
Thomas Purcell's avatar
Thomas Purcell committed
15

Thomas Purcell's avatar
Thomas Purcell committed
16
    extern std::unique_ptr<int[]> TEMP_STORAGE_REG; //!< Register to see which feature is stored in each slot
Thomas Purcell's avatar
Thomas Purcell committed
17
    extern std::unique_ptr<double[]> PRIMARY_FEAT_ARR; //!< Value of the stored features
Thomas Purcell's avatar
Thomas Purcell committed
18
19
    extern std::unique_ptr<double[]> VALUES_ARR; //!< Value of the stored features
    extern std::unique_ptr<double[]> TEMP_STORAGE_ARR; //!< Array to temporarily store feature values
Thomas Purcell's avatar
Thomas Purcell committed
20

Thomas Purcell's avatar
Thomas Purcell committed
21
22
23
24
25
26
27
28
    /**
     * @brief Get the maximum number of new features for each rung
     *
     * @param new_op operator that will add new features
     * @param n_current_features current number of of features in the rung
     *
     * @return [description]
     */
29
    int get_number_new_features(std::string new_op, int n_current_features);
Thomas Purcell's avatar
Thomas Purcell committed
30

Thomas Purcell's avatar
Thomas Purcell committed
31
32
33
34
35
36
37
38
    /**
     * @brief Get the maximum number of features to store
     *
     * @param allowed_operators list of allowed operators
     * @param n_dims Number of dimensions to store
     * @param n_feats number of features in Phi_0
     * @return [description]
     */
39
    int get_max_number_features(std::vector<std::string> allowed_operators, int n_dims, int n_feats);
Thomas Purcell's avatar
Thomas Purcell committed
40

Thomas Purcell's avatar
Thomas Purcell committed
41
42
43
44
45
46
47
    /**
     * @brief set of the value arrays
     * @details Take initial parameters and construct the feature arraies
     *
     * @param n_samples number of samples per feature
     * @param n_primary_feat number of primary features
     */
Thomas Purcell's avatar
Thomas Purcell committed
48
49
50
51
52
53
54
55
56
57
58
    void initialize_values_arr(int n_samples, int n_primary_feat);

    /**
     * @brief set of the value arrays
     * @details Take initial parameters and construct the feature arraies
     *
     * @param n_dims Number of dimensions to store
     * @param n_feat number of features to store
     * @param use_temp If true keep the temporary_storage
     */
    void resize_values_arr(int n_dims, int n_feat, bool use_temp);
Thomas Purcell's avatar
Thomas Purcell committed
59

Thomas Purcell's avatar
Thomas Purcell committed
60
61
62
63
64
65
66
67
    /**
     * @brief Get a reference slot/feature register
     *
     * @param ind Feature index
     * @param offset Offset integer for TEMP_STORE_ARRAY
     *
     * @return The register element for a given feature index and offset
     */
Thomas Purcell's avatar
Thomas Purcell committed
68
    inline int& temp_storage_reg(int ind, int offset = 0){return TEMP_STORAGE_REG[(ind % N_STORE_FEATURES) + (offset % 3) * N_STORE_FEATURES];}
Thomas Purcell's avatar
Thomas Purcell committed
69

Thomas Purcell's avatar
Thomas Purcell committed
70
71
72
73
74
75
76
    /**
     * @brief Access element of the permanent storage array
     *
     * @param feature_ind The feature index to access
     *
     * @return pointer to the feature;s data array
     */
77
78
    inline double* access_value_arr(int feature_ind){return VALUES_ARR.get() + feature_ind*N_SAMPLES;}

Thomas Purcell's avatar
Thomas Purcell committed
79
80
81
82
83
84
85
    /**
     * @brief Access element of temporary storage array
     *
     * @param slot The slot of the temporary storage arrays
     *
     * @return pointer to the feature's temporary storage
     */
86
87
    inline double* access_temp_storage(int slot){return TEMP_STORAGE_ARR.get() + slot*N_SAMPLES;}

Thomas Purcell's avatar
Thomas Purcell committed
88
89
90
91
92
93
94
95
    /**
     * @brief Access the value_ptr to a feature
     *
     * @param ind Feature index
     * @param offset the offset for the storage
     *
     * @return The value pointer
     */
96
97
98
99
100
    inline double* get_value_ptr(int ind, int offset = 0)
    {
        if(ind < N_STORE_FEATURES)
            return  access_value_arr(ind);
        temp_storage_reg(ind, offset) = ind;
Thomas Purcell's avatar
Thomas Purcell committed
101
        return access_temp_storage((ind % N_STORE_FEATURES) + (offset % 3) * N_STORE_FEATURES);
102
    }
Thomas Purcell's avatar
Thomas Purcell committed
103
104
105
106
107

    inline double* get_primary_feat_ptr(int ind)
    {
        return PRIMARY_FEAT_ARR.get() + ind * N_SAMPLES;
    }
Thomas Purcell's avatar
Thomas Purcell committed
108
109
}

110
#endif