2016-02-10 12:23:13 +03:00
/* -------------------------------------------------------------------------- */
2023-01-09 14:23:19 +03:00
/* Copyright 2002-2023, OpenNebula Project, OpenNebula Systems */
2016-02-10 12:23:13 +03:00
/* */
/* Licensed under the Apache License, Version 2.0 (the "License"); you may */
/* not use this file except in compliance with the License. You may obtain */
/* a copy of the License at */
/* */
/* http://www.apache.org/licenses/LICENSE-2.0 */
/* */
/* Unless required by applicable law or agreed to in writing, software */
/* distributed under the License is distributed on an "AS IS" BASIS, */
/* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. */
/* See the License for the specific language governing permissions and */
/* limitations under the License. */
/* -------------------------------------------------------------------------- */
# ifndef ACTION_SET_H
# define ACTION_SET_H
/**
* This class defines actions sets ( for example the set of actions supported
* by the driver ) . Just the basic methods to initialize the set and check if a
* an action is included is provided ( similar to FD_SET ( 3 ) or SIGSETOPS ( 3 ) )
*
* Types should be enums with uint values .
*/
template < typename T >
class ActionSet
{
public :
2024-06-03 12:40:24 +03:00
ActionSet ( ) : action_set ( 0UL ) { } ;
2016-02-10 12:23:13 +03:00
ActionSet ( const T * actions , int actions_len ) : action_set ( 0 )
{
for ( int i = 0 ; i < actions_len ; i + + )
{
set ( actions [ i ] ) ;
}
} ;
2024-06-03 12:40:24 +03:00
~ ActionSet ( ) { } ;
2016-02-10 12:23:13 +03:00
/* Set the action in the set */
void set ( T action )
{
2017-02-01 00:12:35 +03:00
action_set | = 1UL < < static_cast < int > ( action ) ;
2016-03-22 17:26:21 +03:00
} ;
void clear ( T action )
{
2017-02-01 00:12:35 +03:00
action_set & = ( ~ ( 1UL < < static_cast < int > ( action ) ) ) ;
2016-02-10 12:23:13 +03:00
} ;
/**
* Check if action is included in the set
* @ param action
* @ return true if included
*/
bool is_set ( T action ) const
{
2017-02-01 00:12:35 +03:00
return ( action_set & ( 1UL < < static_cast < int > ( action ) ) ) ! = 0 ;
2016-02-10 12:23:13 +03:00
} ;
private :
long long action_set ;
} ;
# endif /*ACTION_SET_H*/