// 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 string value from |path| to |value|, ignoring trailing whitespace.
// Logs an error and returns false on failure.
bool ReadStringFile(const base::FilePath& path, std::string* value_out);

// 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_
