Rietveld Code Review Tool
Help | Bug tracker | Discussion group | Source code

Unified Diff: src/AllocatedArray.h

Issue 29369365: Issue #4692 - Rewrite `SetTimeout` facility to avoid `JsValuePtr` and `JsValueList`
Patch Set: Created Dec. 19, 2016, 10:24 p.m.
Use n/p to move between diff chunks; N/P to move between comments.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: src/AllocatedArray.h
===================================================================
new file mode 100644
--- /dev/null
+++ b/src/AllocatedArray.h
@@ -0,0 +1,90 @@
+/*
+ * This file is part of Adblock Plus <https://adblockplus.org/>,
+ * Copyright (C) 2006-2016 Eyeo GmbH
+ *
+ * Adblock Plus is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 3 as
+ * published by the Free Software Foundation.
+ *
+ * Adblock Plus is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with Adblock Plus. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#if !defined(ALLOCATED_ARRAY_H)
+#define ALLOCATED_ARRAY_H
+
+template<class T>
+class AllocatedArray
+{
+ size_t size;
+ std::unique_ptr<T[]> p;
+
+ /**
+ * Copy constructor deleted. Allocation is unique to single object.
+ */
+ AllocatedArray<T>(const AllocatedArray<T>&); // = delete
+ /**
+ * Copy assignment deleted. Allocation is unique to single object.
+ */
+ AllocatedArray<T>& operator=(const AllocatedArray<T>&); // = delete
+
+public:
+ /**
+ * Default constructor. No allocation.
+ */
+ AllocatedArray()
+ : size(0),
+ p()
+ {}
+
+ /**
+ * Length constructor.
+ * Initializes each element with default constructor of T().
+ * Does no allocation if `n` is zero.
+ */
+ AllocatedArray(size_t n)
+ : size(n),
+ p(n > 0 ? new T[n] : nullptr) // TODO: make_unique once available
+ {}
+
+ AllocatedArray<T>(AllocatedArray<T>&& x) // = default;
+ {
+ size = x.size;
+ std::swap(p, x.p);
+ }
+
+ AllocatedArray<T>& operator=(AllocatedArray<T>&& x) // = default;
+ {
+ size = x.size;
+ std::swap(p, x.p);
+ return *this;
+ }
+
+ T& operator[](size_t i) const
+ {
+ return p.get()[i];
+ }
+
+ T* Get() const
+ {
+ return p.get();
+ }
+
+ void Reset()
+ {
+ size = 0;
+ p.reset();
+ }
+
+ size_t Size() const
+ {
+ return size;
+ }
+};
+
+#endif
« no previous file with comments | « libadblockplus.gyp ('k') | src/GlobalJsObject.h » ('j') | src/GlobalJsObject.cpp » ('J')

Powered by Google App Engine
This is Rietveld