================ @@ -0,0 +1,307 @@ +//===- llvm/ADT/PagedVector.h - 'Lazyly allocated' vectors --------*- C++ +//-*-===// +// +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//===----------------------------------------------------------------------===// +// +// This file defines the PagedVector class. +// +//===----------------------------------------------------------------------===// +#ifndef LLVM_ADT_PAGEDVECTOR_H +#define LLVM_ADT_PAGEDVECTOR_H + +#include "llvm/ADT/PointerIntPair.h" +#include "llvm/ADT/SmallVector.h" +#include "llvm/ADT/iterator_range.h" +#include "llvm/Support/Allocator.h" +#include <cassert> +#include <vector> + +namespace llvm { +// A vector that allocates memory in pages. +// +// Order is kept, but memory is allocated only when one element of the page is +// accessed. This introduces a level of indirection, but it is useful when you +// have a sparsely initialised vector where the full size is allocated upfront. +// +// As a side effect the elements are initialised later than in a normal vector. +// On the first access to one of the elements of a given page all, the elements +// of the page are initialised. This also means that the elements of the page +// are initialised beyond the size of the vector. +// +// Similarly on destruction the elements are destroyed only when the page is +// not needed anymore, delaying invoking the destructor of the elements. +// +// Notice that this does not have iterators, because if you have iterators it +// probably means you are going to touch all the memory in any case, so better +// use a std::vector in the first place. ---------------- ktf wrote:
Done. https://github.com/llvm/llvm-project/pull/66430 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits