// Copyright (c) 2016 The WebM project authors. All Rights Reserved.
//
// Use of this source code is governed by a BSD-style license
// that can be found in the LICENSE file in the root of the source
// tree. An additional intellectual property rights grant can be found
// in the file PATENTS.  All contributing project authors may
// be found in the AUTHORS file in the root of the source tree.
#ifndef LIBWEBM_COMMON_FILE_UTIL_H_
#define LIBWEBM_COMMON_FILE_UTIL_H_

#include <stdint.h>

#include <string>

#include "mkvmuxer/mkvmuxertypes.h"  // LIBWEBM_DISALLOW_COPY_AND_ASSIGN()

namespace libwebm {

// Returns a temporary file name.
std::string GetTempFileName();

// Returns size of file specified by |file_name|, or 0 upon failure.
uint64_t GetFileSize(const std::string& file_name);

// Manages life of temporary file specified at time of construction. Deletes
// file upon destruction.
class TempFileDeleter {
 public:
  TempFileDeleter();
  explicit TempFileDeleter(std::string file_name) : file_name_(file_name) {}
  ~TempFileDeleter();
  const std::string& name() const { return file_name_; }

 private:
  std::string file_name_;
  LIBWEBM_DISALLOW_COPY_AND_ASSIGN(TempFileDeleter);
};

}  // namespace libwebm

#endif  // LIBWEBM_COMMON_FILE_UTIL_H_