#ifndef PPAPI_CPP_DEV_ALARMS_DEV_H_
#define PPAPI_CPP_DEV_ALARMS_DEV_H_
#include <string>
#include "ppapi/c/dev/ppb_alarms_dev.h"
#include "ppapi/cpp/dev/may_own_ptr_dev.h"
#include "ppapi/cpp/dev/optional_dev.h"
#include "ppapi/cpp/dev/string_wrapper_dev.h"
#include "ppapi/cpp/dev/struct_wrapper_output_traits_dev.h"
#include "ppapi/cpp/instance_handle.h"
#include "ppapi/cpp/output_traits.h"
namespace pp {
template <typename T>
class CompletionCallbackWithOutput;
template <typename T>
class Array;
namespace alarms {
class Alarm_Dev {
public:
typedef PP_Alarms_Alarm_Dev CType;
typedef PP_Alarms_Alarm_Array_Dev CArrayType;
Alarm_Dev();
Alarm_Dev(const Alarm_Dev& other);
explicit Alarm_Dev(const PP_Alarms_Alarm_Dev& other);
Alarm_Dev(PP_Alarms_Alarm_Dev* storage, NotOwned);
~Alarm_Dev();
Alarm_Dev& operator=(const Alarm_Dev& other);
Alarm_Dev& operator=(const PP_Alarms_Alarm_Dev& other);
std::string name() const;
void set_name(const std::string& value);
double scheduled_time() const;
void set_scheduled_time(double value);
bool is_period_in_minutes_set() const;
void unset_period_in_minutes();
double period_in_minutes() const;
void set_period_in_minutes(double value);
const PP_Alarms_Alarm_Dev* ToStruct() const;
PP_Alarms_Alarm_Dev* StartRawUpdate();
void EndRawUpdate();
private:
internal::MayOwnPtr<PP_Alarms_Alarm_Dev> storage_;
internal::StringWrapper name_wrapper_;
Optional<double> period_in_minutes_wrapper_;
};
class AlarmCreateInfo_Dev {
public:
typedef PP_Alarms_AlarmCreateInfo_Dev CType;
AlarmCreateInfo_Dev();
AlarmCreateInfo_Dev(const AlarmCreateInfo_Dev& other);
explicit AlarmCreateInfo_Dev(const PP_Alarms_AlarmCreateInfo_Dev& other);
AlarmCreateInfo_Dev(PP_Alarms_AlarmCreateInfo_Dev* storage, NotOwned);
~AlarmCreateInfo_Dev();
AlarmCreateInfo_Dev& operator=(const AlarmCreateInfo_Dev& other);
AlarmCreateInfo_Dev& operator=(const PP_Alarms_AlarmCreateInfo_Dev& other);
bool is_when_set() const;
void unset_when();
double when() const;
void set_when(double value);
bool is_delay_in_minutes_set() const;
void unset_delay_in_minutes();
double delay_in_minutes() const;
void set_delay_in_minutes(double value);
bool is_period_in_minutes_set() const;
void unset_period_in_minutes();
double period_in_minutes() const;
void set_period_in_minutes(double value);
const PP_Alarms_AlarmCreateInfo_Dev* ToStruct() const;
PP_Alarms_AlarmCreateInfo_Dev* StartRawUpdate();
void EndRawUpdate();
private:
internal::MayOwnPtr<PP_Alarms_AlarmCreateInfo_Dev> storage_;
Optional<double> when_wrapper_;
Optional<double> delay_in_minutes_wrapper_;
Optional<double> period_in_minutes_wrapper_;
};
class Alarms_Dev {
public:
explicit Alarms_Dev(const InstanceHandle& instance);
~Alarms_Dev();
void Create(const Optional<std::string>& name,
const AlarmCreateInfo_Dev& alarm_info);
typedef CompletionCallbackWithOutput<Alarm_Dev> GetCallback;
int32_t Get(const Optional<std::string>& name, const GetCallback& callback);
typedef CompletionCallbackWithOutput<Array<Alarm_Dev> > GetAllCallback;
int32_t GetAll(const GetAllCallback& callback);
void Clear(const Optional<std::string>& name);
void ClearAll();
private:
InstanceHandle instance_;
};
}
namespace internal {
template <>
struct CallbackOutputTraits<alarms::Alarm_Dev>
: public internal::StructWrapperOutputTraits<alarms::Alarm_Dev> {
};
template <>
struct CallbackOutputTraits<alarms::AlarmCreateInfo_Dev>
: public internal::StructWrapperOutputTraits<alarms::AlarmCreateInfo_Dev> {
};
}
}
#endif