| // Copyright 2018 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. |
| |
| #include "src/storage/fvm/driver/slice_extent.h" |
| |
| #include <zircon/assert.h> |
| |
| #include <memory> |
| |
| namespace fvm { |
| |
| std::unique_ptr<SliceExtent> SliceExtent::Split(size_t vslice) { |
| ZX_ASSERT(start() <= vslice); |
| ZX_ASSERT(vslice < end()); |
| |
| std::unique_ptr<SliceExtent> new_extent(new SliceExtent(vslice + 1)); |
| new_extent->pslices_.reserve(end() - vslice); |
| |
| for (size_t vs = vslice + 1; vs < end(); vs++) { |
| new_extent->push_back(at(vs)); |
| } |
| while (!empty() && vslice + 1 != end()) { |
| pop_back(); |
| } |
| return new_extent; |
| } |
| |
| void SliceExtent::Merge(const SliceExtent& other) { |
| ZX_ASSERT(end() == other.start()); |
| pslices_.reserve(other.size()); |
| |
| for (size_t vs = other.start(); vs < other.end(); vs++) { |
| push_back(other.at(vs)); |
| } |
| } |
| |
| } // namespace fvm |