// Copyright 2013 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#include "ppapi/shared_impl/socket_option_data.h"

namespace ppapi {

SocketOptionData::SocketOptionData() : type_(TYPE_INVALID), value_(0) {}

SocketOptionData::~SocketOptionData() {}

SocketOptionData::Type SocketOptionData::GetType() const { return type_; }

bool SocketOptionData::GetBool(bool* out_value) const {
  if (!out_value || type_ != TYPE_BOOL)
    return false;
  *out_value = value_ != 0;
  return true;
}

bool SocketOptionData::GetInt32(int32_t* out_value) const {
  if (!out_value || type_ != TYPE_INT32)
    return false;
  *out_value = value_;
  return true;
}

void SocketOptionData::SetBool(bool value) {
  type_ = TYPE_BOOL;
  value_ = value ? 1 : 0;
}

void SocketOptionData::SetInt32(int32_t value) {
  type_ = TYPE_INT32;
  value_ = value;
}

}  // namespace ppapi
