Negotiating Simulcast in the initial offer/answer - Part1.

This change adds Simulcast negotiation to media session offers/answers.
Next step is to add negotiation logic to PeerConnection.

Bug: webrtc:10075
Change-Id: Iea3a1084c16058f0efbc974cf623ec05c3c7a74f
Reviewed-on: https://webrtc-review.googlesource.com/c/115790
Reviewed-by: Seth Hampson <shampson@webrtc.org>
Reviewed-by: Steve Anton <steveanton@webrtc.org>
Commit-Queue: Amit Hilbuch <amithi@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#26115}
diff --git a/pc/simulcastdescription.h b/pc/simulcastdescription.h
index 9f15f78..0781a6a 100644
--- a/pc/simulcastdescription.h
+++ b/pc/simulcastdescription.h
@@ -25,6 +25,7 @@
 
   SimulcastLayer(const SimulcastLayer& other) = default;
   SimulcastLayer& operator=(const SimulcastLayer& other) = default;
+  bool operator==(const SimulcastLayer& other) const;
 
   std::string rid;
   bool is_paused;
@@ -48,6 +49,12 @@
 //            {SimulcastLayer("4", false), SimulcastLayer("5", false});
 class SimulcastLayerList final {
  public:
+  // Type definitions required by a container.
+  typedef size_t size_type;
+  typedef std::vector<SimulcastLayer> value_type;
+  typedef std::vector<std::vector<SimulcastLayer>>::const_iterator
+      const_iterator;
+
   // Use to add a layer when there will be no alternatives.
   void AddLayer(const SimulcastLayer& layer);
 
@@ -57,13 +64,9 @@
 
   // Read-only access to the contents.
   // Note: This object does not allow removal of layers.
-  std::vector<std::vector<SimulcastLayer>>::const_iterator begin() const {
-    return list_.begin();
-  }
+  const_iterator begin() const { return list_.begin(); }
 
-  std::vector<std::vector<SimulcastLayer>>::const_iterator end() const {
-    return list_.end();
-  }
+  const_iterator end() const { return list_.end(); }
 
   const std::vector<SimulcastLayer>& operator[](size_t index) const;