65 lines
2.3 KiB
C++
65 lines
2.3 KiB
C++
// Copyright 2017 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_ZUCCHINI_REFERENCE_SET_H_
|
|
#define COMPONENTS_ZUCCHINI_REFERENCE_SET_H_
|
|
|
|
#include <stddef.h>
|
|
|
|
#include <vector>
|
|
|
|
#include "components/zucchini/image_utils.h"
|
|
|
|
namespace zucchini {
|
|
|
|
class TargetPool;
|
|
|
|
// Container of distinct references of one type, along with traits, only used
|
|
// during patch generation.
|
|
class ReferenceSet {
|
|
public:
|
|
using const_iterator = std::vector<Reference>::const_iterator;
|
|
|
|
// |traits| specifies the reference represented. |target_pool| specifies
|
|
// common targets shared by all reference represented, and mediates target
|
|
// translation between offsets and indexes.
|
|
ReferenceSet(const ReferenceTypeTraits& traits,
|
|
const TargetPool& target_pool);
|
|
ReferenceSet(const ReferenceSet&) = delete;
|
|
ReferenceSet(ReferenceSet&&);
|
|
~ReferenceSet();
|
|
|
|
// Either one of the initializers below should be called exactly once. These
|
|
// insert all references from |ref_reader/refs| into this class. The targets
|
|
// of these references must be in |target_pool_|.
|
|
void InitReferences(ReferenceReader&& ref_reader);
|
|
void InitReferences(const std::vector<Reference>& refs);
|
|
|
|
const std::vector<Reference>& references() const { return references_; }
|
|
const ReferenceTypeTraits& traits() const { return traits_; }
|
|
const TargetPool& target_pool() const { return target_pool_; }
|
|
TypeTag type_tag() const { return traits_.type_tag; }
|
|
PoolTag pool_tag() const { return traits_.pool_tag; }
|
|
offset_t width() const { return traits_.width; }
|
|
|
|
// Looks up the Reference by an |offset| that it spans. |offset| is assumed to
|
|
// be valid, i.e., |offset| must be spanned by some Reference in
|
|
// |references_|.
|
|
Reference at(offset_t offset) const;
|
|
|
|
size_t size() const { return references_.size(); }
|
|
const_iterator begin() const { return references_.begin(); }
|
|
const_iterator end() const { return references_.end(); }
|
|
|
|
private:
|
|
ReferenceTypeTraits traits_;
|
|
const TargetPool& target_pool_;
|
|
// List of distinct Reference instances sorted by location.
|
|
std::vector<Reference> references_;
|
|
};
|
|
|
|
} // namespace zucchini
|
|
|
|
#endif // COMPONENTS_ZUCCHINI_REFERENCE_SET_H_
|