summaryrefslogtreecommitdiffstats
path: root/src/include/usr/targeting/predicates/predicatectm.H
blob: 760f0d02d12e55987f591e40aca2b7bd97b03845 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118

#ifndef TARG_PREDICATECTM_H
#define TARG_PREDICATECTM_H

/**
 *  @file predicatectm.H
 *
 *  @brief Interface for a predicate which fiters a target based on its class,
 *      type, and model.
 */

//******************************************************************************
// Includes
//******************************************************************************

// STD

// Other Host Boot Components

// Targeting Component
#include <targeting/target.H>
#include <targeting/attributeenums.H>
#include <targeting/predicates/predicatebase.H>

//******************************************************************************
// Macros 
//******************************************************************************

#undef TARG_NAMESPACE
#undef TARG_CLASS
#undef TARG_FN

//******************************************************************************
// Interface 
//******************************************************************************

namespace TARGETING
{

#define TARG_NAMESPACE "TARGETING::"
#define TARG_CLASS "PredicateCTM::"

class Target;

/**
 *  @brief Predicate class which filters a target based on its class, type,
 *      and model
 */
class PredicateCTM : public PredicateBase
{
    public:

        /**
         *  @brief Create a target class, type, model predicate
         *
         *  @param[in] i_class Class of matching target, default NA (any)
         *  @param[in] i_type Type of matching target, default NA (any)
         *  @param[in] i_model Model of matching target, default NA (any)
         */
        PredicateCTM(
            CLASS i_class = CLASS_NA,
            TYPE  i_type  = TYPE_NA,
            MODEL i_model = MODEL_NA);

        /**
         *  @brief Destroy a class, type, model predicate 
         */
        virtual ~PredicateCTM() 
        {
            #define TARG_FUNC "~PredicateCTM()"
            #undef TARG_FUNC
        }
    
        /**
         *  @brief Returns whether target matches the specified class, type,
         *      model
         * 
         *  @par Detailed Description:
         *      Returns whether target matches the specified class, type, model.
         *      Note that all three fields are always compared, so wildcards
         *      (CLASS_NA, TYPE_NA, MODEL_NA) must be used for any fields that
         *      do not matter.  See PredicateBase class for parameter/return 
         *      description.
         */
        virtual bool operator()(
            const Target* i_pTarget) const;

    private:
    
        CLASS iv_class; ///< Class to compare with that of target
        TYPE  iv_type;  ///< Type to compare with that of target
        MODEL iv_model; ///< Model to compare with that of target

        TARG_DISABLE_COPY_AND_ASSIGNMENT_OPERATORS(PredicateCTM);
};

//******************************************************************************
// PredicateCTM::PredicateCTM
//******************************************************************************

inline PredicateCTM::PredicateCTM(
    const CLASS i_class,
    const TYPE  i_type,
    const MODEL i_model) 
: iv_class(i_class), 
  iv_type(i_type), 
  iv_model(i_model) 
{
    #define TARG_FUNC "PredicateCTM(...)"
    #undef TARG_FUNC
}

#undef TARG_CLASS
#undef TARG_NAMESPACE

} // End namespace TARGETING

#endif // TARG_PREDICATECTM_H
OpenPOWER on IntegriCloud