Bug 1546697 - EnumeratedArray should have a copy assignment operator. r=froydnj
authorEmilio Cobos Álvarez <emilio@crisal.io>
Thu, 25 Apr 2019 16:40:47 +0000
changeset 530217 b1a3b366de8b9f469bb19d239f47d89d7306b04f
parent 530216 41ee8dc862a966e71ab23a2b3ab59c72b2fc21c9
child 530218 15cb052119fe2c70a42b0eeba69a4583f53a5718
push id11265
push userffxbld-merge
push dateMon, 13 May 2019 10:53:39 +0000
treeherdermozilla-beta@77e0fe8dbdd3 [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
reviewersfroydnj
bugs1546697
milestone68.0a1
first release with
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
last release without
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
Bug 1546697 - EnumeratedArray should have a copy assignment operator. r=froydnj I'll use this in a following patch. Differential Revision: https://phabricator.services.mozilla.com/D28679
mfbt/EnumeratedArray.h
mfbt/tests/TestEnumeratedArray.cpp
--- a/mfbt/EnumeratedArray.h
+++ b/mfbt/EnumeratedArray.h
@@ -75,16 +75,23 @@ class EnumeratedArray {
 
   EnumeratedArray& operator=(EnumeratedArray&& aOther) {
     for (size_t i = 0; i < kSize; i++) {
       mArray[i] = std::move(aOther.mArray[i]);
     }
     return *this;
   }
 
+  EnumeratedArray& operator=(const EnumeratedArray& aOther) {
+    for (size_t i = 0; i < kSize; i++) {
+      mArray[i] = aOther.mArray[i];
+    }
+    return *this;
+  }
+
   typedef typename ArrayType::iterator iterator;
   typedef typename ArrayType::const_iterator const_iterator;
   typedef typename ArrayType::reverse_iterator reverse_iterator;
   typedef typename ArrayType::const_reverse_iterator const_reverse_iterator;
 
   // Methods for range-based for loops.
   iterator begin() { return mArray.begin(); }
   const_iterator begin() const { return mArray.begin(); }
--- a/mfbt/tests/TestEnumeratedArray.cpp
+++ b/mfbt/tests/TestEnumeratedArray.cpp
@@ -1,34 +1,46 @@
 /* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
 /* vim: set ts=8 sts=2 et sw=2 tw=80: */
 /* This Source Code Form is subject to the terms of the Mozilla Public
  * License, v. 2.0. If a copy of the MPL was not distributed with this file,
  * You can obtain one at http://mozilla.org/MPL/2.0/. */
 
 #include "mozilla/EnumeratedArray.h"
 
+using mozilla::EnumeratedArray;
+
 enum class AnimalSpecies { Cow, Sheep, Pig, Count };
 
+using TestArray = EnumeratedArray<AnimalSpecies, AnimalSpecies::Count, int>;
+
 void TestInitialValueByConstructor() {
-  using namespace mozilla;
   // Style 1
-  EnumeratedArray<AnimalSpecies, AnimalSpecies::Count, int> headCount(1, 2, 3);
+  TestArray headCount(1, 2, 3);
   MOZ_RELEASE_ASSERT(headCount[AnimalSpecies::Cow] == 1);
   MOZ_RELEASE_ASSERT(headCount[AnimalSpecies::Sheep] == 2);
   MOZ_RELEASE_ASSERT(headCount[AnimalSpecies::Pig] == 3);
   // Style 2
-  EnumeratedArray<AnimalSpecies, AnimalSpecies::Count, int> headCount2{5, 6, 7};
+  TestArray headCount2{5, 6, 7};
   MOZ_RELEASE_ASSERT(headCount2[AnimalSpecies::Cow] == 5);
   MOZ_RELEASE_ASSERT(headCount2[AnimalSpecies::Sheep] == 6);
   MOZ_RELEASE_ASSERT(headCount2[AnimalSpecies::Pig] == 7);
   // Style 3
-  EnumeratedArray<AnimalSpecies, AnimalSpecies::Count, int> headCount3(
-      {8, 9, 10});
+  TestArray headCount3({8, 9, 10});
   MOZ_RELEASE_ASSERT(headCount3[AnimalSpecies::Cow] == 8);
   MOZ_RELEASE_ASSERT(headCount3[AnimalSpecies::Sheep] == 9);
   MOZ_RELEASE_ASSERT(headCount3[AnimalSpecies::Pig] == 10);
 }
 
+void TestAssignment() {
+  TestArray headCount{8, 9, 10};
+  TestArray headCount2;
+  headCount2 = headCount;
+  MOZ_RELEASE_ASSERT(headCount2[AnimalSpecies::Cow] == 8);
+  MOZ_RELEASE_ASSERT(headCount2[AnimalSpecies::Sheep] == 9);
+  MOZ_RELEASE_ASSERT(headCount2[AnimalSpecies::Pig] == 10);
+}
+
 int main() {
   TestInitialValueByConstructor();
+  TestAssignment();
   return 0;
-}
\ No newline at end of file
+}