blob: 7c48fde0ad7b2851fa5ed60a7221a48e839f375b [file] [log] [blame]
// Copyright 2018 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.
#ifndef COMPONENTS_FEED_CORE_FEED_CONTENT_MUTATION_H_
#define COMPONENTS_FEED_CORE_FEED_CONTENT_MUTATION_H_
#include <list>
#include <string>
#include "base/macros.h"
#include "base/time/time.h"
namespace feed {
class ContentOperation;
// Native counterpart of ContentMutation.java.
// To commit a set of ContentOperation into FeedContentDatabase, user need to
// create a ContentMutation, next use Append* methods to append operations
// into the mutation, and then pass the ContentMutation to
// |FeedContentDatabase::CommitContentMutation| to commit operations.
class ContentMutation {
public:
ContentMutation();
~ContentMutation();
void AppendDeleteOperation(std::string key);
void AppendDeleteAllOperation();
void AppendDeleteByPrefixOperation(std::string prefix);
void AppendUpsertOperation(std::string key, std::string value);
// Check if mutation has ContentOperation left.
bool Empty();
// Return the number of operations in the mutation.
size_t Size() const;
base::TimeTicks GetStartTime() const;
// This will remove the first ContentOperation in |operations_list_| and
// return it to caller.
ContentOperation TakeFristOperation();
private:
std::list<ContentOperation> operations_list_;
const base::TimeTicks start_time_;
DISALLOW_COPY_AND_ASSIGN(ContentMutation);
};
} // namespace feed
#endif // COMPONENTS_FEED_CORE_FEED_CONTENT_MUTATION_H_