blob: ddfd9a7a2bdb71670d7042953381cf01d446c810 [file] [log] [blame]
// Copyright 2024 The Fuchsia 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 SRC_STORAGE_F2FS_TIMESTAMP_H_
#define SRC_STORAGE_F2FS_TIMESTAMP_H_
#include <zircon/types.h>
#include "src/storage/f2fs/common.h"
namespace f2fs {
enum class UpdateMode {
kRelative = 0,
kNoAccess,
kStrict,
kNum,
};
class Timestamps {
public:
Timestamps(UpdateMode mode, const timespec &atime, const timespec &btime, const timespec &ctime,
const timespec &mtime);
// Tagging types
struct AccessTime {};
struct BirthTime {};
struct ChangeTime {};
struct ModificationTime {};
template <typename T>
const timespec &Get() const;
template <typename U>
void Update();
template <typename W>
void Update(const timespec &t);
// Adjust time intervals for access time and modification time. A call to Update() is effective
// only when |atime_| or |mtime_| has a time value before the interval.
void SetAccessTimeInterval(time_t secs = kDayInSec) { access_time_interval_ = secs; }
void SetModificationTimeInterval(time_t nsecs = 100) { modification_time_interval_ = nsecs; }
// |dirty_| is set when a call to Update() methods is effective. A caller can use it to detect any
// change on time values after the last call to ClearDirty().
void ClearDirty() { dirty_ = false; }
bool IsDirty() const { return dirty_; }
static constexpr size_t kDayInSec = 60 * 60 * 24;
private:
UpdateMode mode_{};
timespec access_time_{};
timespec birth_time_{};
timespec change_time_{};
timespec modification_time_{};
bool dirty_ = false;
time_t access_time_interval_ = kDayInSec; // sec
time_t modification_time_interval_ = 100; // ns
};
} // namespace f2fs
#endif // SRC_STORAGE_F2FS_TIMESTAMP_H_