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

#ifndef POWER_MANAGER_COMMON_UTIL_H_
#define POWER_MANAGER_COMMON_UTIL_H_

#include <string>
#include <vector>

#include <base/files/file_path.h>
#include <base/time/time.h>

namespace power_manager {
namespace util {

// Clamps |percent| in the range [0.0, 100.0].
double ClampPercent(double percent);

// Returns |delta| as a string of the format "4h3m45s".
std::string TimeDeltaToString(base::TimeDelta delta);

// Writes the given buffer into the file, overwriting any data that was
// previously there. Returns true if all bytes are written or false otherwise.
bool WriteFileFully(const base::FilePath& filename, const char* data, int size);

// Writes the base-10 representation of |value| to |path| without a trailing
// newline. Logs an error and returns false on failure.
bool WriteInt64File(const base::FilePath& path, int64_t value);

// Reads a base-10 int64 value from |path| to |value|, ignoring trailing
// whitespace. Logs an error and returns false on failure.
bool ReadInt64File(const base::FilePath& path, int64_t* value_out);

// Reads a base-10 uint64 value from |path| to |value|, ignoring trailing
// whitespace. Logs an error and returns false on failure.
bool ReadUint64File(const base::FilePath& path, uint64_t* value_out);

// Reads a base-16 uint32 value from |path| to |value|, ignoring trailing
// whitespace. Logs an error and returns false on failure.
bool ReadHexUint32File(const base::FilePath& path, uint32_t* value_out);

// Joins |paths| using |separator|.
std::string JoinPaths(const std::vector<base::FilePath>& paths,
                      const std::string& separator);

}  // namespace util
}  // namespace power_manager

#endif  // POWER_MANAGER_COMMON_UTIL_H_
