Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(113)

Unified Diff: runtime/vm/growable_array.h

Issue 2715463003: Add option to gen_snapshot for creating a Makefile describing a snapshot's dependencies. (Closed)
Patch Set: . Created 3 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « runtime/vm/flow_graph_inliner.h ('k') | runtime/vm/isolate_reload.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: runtime/vm/growable_array.h
diff --git a/runtime/vm/growable_array.h b/runtime/vm/growable_array.h
index b2d03e08bf4fedf2d2cc5733a4743f0a89f45c48..b8e27a30f77699b0597ee4804d2c8427f4dbd9d3 100644
--- a/runtime/vm/growable_array.h
+++ b/runtime/vm/growable_array.h
@@ -10,192 +10,40 @@
#ifndef RUNTIME_VM_GROWABLE_ARRAY_H_
#define RUNTIME_VM_GROWABLE_ARRAY_H_
-#include "platform/utils.h"
-#include "vm/allocation.h"
-#include "vm/isolate.h"
+#include "platform/growable_array.h"
+#include "vm/thread.h"
#include "vm/zone.h"
namespace dart {
-template <typename T, typename B, typename Allocator = Zone>
-class BaseGrowableArray : public B {
- public:
- explicit BaseGrowableArray(Allocator* allocator)
- : length_(0), capacity_(0), data_(NULL), allocator_(allocator) {}
-
- BaseGrowableArray(intptr_t initial_capacity, Allocator* allocator)
- : length_(0), capacity_(0), data_(NULL), allocator_(allocator) {
- if (initial_capacity > 0) {
- capacity_ = Utils::RoundUpToPowerOfTwo(initial_capacity);
- data_ = allocator_->template Alloc<T>(capacity_);
- }
- }
-
- ~BaseGrowableArray() { allocator_->template Free<T>(data_, capacity_); }
-
- intptr_t length() const { return length_; }
- T* data() const { return data_; }
- bool is_empty() const { return length_ == 0; }
-
- void TruncateTo(intptr_t length) {
- ASSERT(length_ >= length);
- length_ = length;
- }
-
- void Add(const T& value) {
- Resize(length() + 1);
- Last() = value;
- }
-
- T& RemoveLast() {
- ASSERT(length_ > 0);
- T& result = operator[](length_ - 1);
- length_--;
- return result;
- }
-
- T& operator[](intptr_t index) const {
- ASSERT(0 <= index);
- ASSERT(index < length_);
- ASSERT(length_ <= capacity_);
- return data_[index];
- }
-
- const T& At(intptr_t index) const { return operator[](index); }
-
- T& Last() const {
- ASSERT(length_ > 0);
- return operator[](length_ - 1);
- }
-
- void AddArray(const BaseGrowableArray<T, B>& src) {
- for (intptr_t i = 0; i < src.length(); i++) {
- Add(src[i]);
- }
- }
-
- void Clear() { length_ = 0; }
-
- void InsertAt(intptr_t idx, const T& value) {
- Resize(length() + 1);
- for (intptr_t i = length_ - 2; i >= idx; i--) {
- data_[i + 1] = data_[i];
- }
- data_[idx] = value;
- }
-
- void Reverse() {
- for (intptr_t i = 0; i < length_ / 2; i++) {
- const intptr_t j = length_ - 1 - i;
- T temp = data_[i];
- data_[i] = data_[j];
- data_[j] = temp;
- }
- }
-
- // Swap entries |i| and |j|.
- void Swap(intptr_t i, intptr_t j) {
- ASSERT(i >= 0);
- ASSERT(j >= 0);
- ASSERT(i < length_);
- ASSERT(j < length_);
- T temp = data_[i];
- data_[i] = data_[j];
- data_[j] = temp;
- }
-
- // NOTE: Does not preserve array order.
- void RemoveAt(intptr_t i) {
- ASSERT(i >= 0);
- ASSERT(i < length_);
- intptr_t last = length_ - 1;
- if (i < last) {
- Swap(i, last);
- }
- RemoveLast();
- }
-
- // The content is uninitialized after calling it.
- void SetLength(intptr_t new_length);
-
- // Sort the array in place.
- inline void Sort(int compare(const T*, const T*));
-
- private:
- intptr_t length_;
- intptr_t capacity_;
- T* data_;
- Allocator* allocator_; // Used to (re)allocate the array.
-
- // Used for growing the array.
- void Resize(intptr_t new_length);
-
- DISALLOW_COPY_AND_ASSIGN(BaseGrowableArray);
-};
-
-
-template <typename T, typename B, typename Allocator>
-inline void BaseGrowableArray<T, B, Allocator>::Sort(int compare(const T*,
- const T*)) {
- typedef int (*CompareFunction)(const void*, const void*);
- qsort(data_, length_, sizeof(T), reinterpret_cast<CompareFunction>(compare));
-}
-
-
-template <typename T, typename B, typename Allocator>
-void BaseGrowableArray<T, B, Allocator>::Resize(intptr_t new_length) {
- if (new_length > capacity_) {
- intptr_t new_capacity = Utils::RoundUpToPowerOfTwo(new_length);
- T* new_data =
- allocator_->template Realloc<T>(data_, capacity_, new_capacity);
- ASSERT(new_data != NULL);
- data_ = new_data;
- capacity_ = new_capacity;
- }
- length_ = new_length;
-}
-
-
-template <typename T, typename B, typename Allocator>
-void BaseGrowableArray<T, B, Allocator>::SetLength(intptr_t new_length) {
- if (new_length > capacity_) {
- T* new_data = allocator_->template Alloc<T>(new_length);
- ASSERT(new_data != NULL);
- data_ = new_data;
- capacity_ = new_length;
- }
- length_ = new_length;
-}
-
-
template <typename T>
-class GrowableArray : public BaseGrowableArray<T, ValueObject> {
+class GrowableArray : public BaseGrowableArray<T, ValueObject, Zone> {
public:
GrowableArray(Zone* zone, intptr_t initial_capacity)
- : BaseGrowableArray<T, ValueObject>(initial_capacity,
- ASSERT_NOTNULL(zone)) {}
+ : BaseGrowableArray<T, ValueObject, Zone>(initial_capacity,
+ ASSERT_NOTNULL(zone)) {}
explicit GrowableArray(intptr_t initial_capacity)
- : BaseGrowableArray<T, ValueObject>(
+ : BaseGrowableArray<T, ValueObject, Zone>(
initial_capacity,
ASSERT_NOTNULL(Thread::Current()->zone())) {}
GrowableArray()
- : BaseGrowableArray<T, ValueObject>(
+ : BaseGrowableArray<T, ValueObject, Zone>(
ASSERT_NOTNULL(Thread::Current()->zone())) {}
};
template <typename T>
-class ZoneGrowableArray : public BaseGrowableArray<T, ZoneAllocated> {
+class ZoneGrowableArray : public BaseGrowableArray<T, ZoneAllocated, Zone> {
public:
ZoneGrowableArray(Zone* zone, intptr_t initial_capacity)
- : BaseGrowableArray<T, ZoneAllocated>(initial_capacity,
- ASSERT_NOTNULL(zone)) {}
+ : BaseGrowableArray<T, ZoneAllocated, Zone>(initial_capacity,
+ ASSERT_NOTNULL(zone)) {}
explicit ZoneGrowableArray(intptr_t initial_capacity)
- : BaseGrowableArray<T, ZoneAllocated>(
+ : BaseGrowableArray<T, ZoneAllocated, Zone>(
initial_capacity,
ASSERT_NOTNULL(Thread::Current()->zone())) {}
ZoneGrowableArray()
- : BaseGrowableArray<T, ZoneAllocated>(
+ : BaseGrowableArray<T, ZoneAllocated, Zone>(
ASSERT_NOTNULL(Thread::Current()->zone())) {}
};
@@ -247,37 +95,6 @@ class ZoneGrowableHandlePtrArray
: BaseGrowableHandlePtrArray<T, ZoneAllocated>(zone, initial_capacity) {}
};
-
-class Malloc : public AllStatic {
- public:
- template <class T>
- static inline T* Alloc(intptr_t len) {
- return reinterpret_cast<T*>(malloc(len * sizeof(T)));
- }
-
- template <class T>
- static inline T* Realloc(T* old_array, intptr_t old_len, intptr_t new_len) {
- return reinterpret_cast<T*>(realloc(old_array, new_len * sizeof(T)));
- }
-
- template <class T>
- static inline void Free(T* old_array, intptr_t old_len) {
- free(old_array);
- }
-};
-
-
-class EmptyBase {};
-
-
-template <typename T>
-class MallocGrowableArray : public BaseGrowableArray<T, EmptyBase, Malloc> {
- public:
- explicit MallocGrowableArray(intptr_t initial_capacity)
- : BaseGrowableArray<T, EmptyBase, Malloc>(initial_capacity, NULL) {}
- MallocGrowableArray() : BaseGrowableArray<T, EmptyBase, Malloc>(NULL) {}
-};
-
} // namespace dart
#endif // RUNTIME_VM_GROWABLE_ARRAY_H_
« no previous file with comments | « runtime/vm/flow_graph_inliner.h ('k') | runtime/vm/isolate_reload.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698