# Copyright (c) 2021 The WebRTC project authors. All Rights Reserved.
#
# Use of this source code is governed by a BSD-style license
# that can be found in the LICENSE file in the root of the source
# tree. An additional intellectual property rights grant can be found
# in the file PATENTS.  All contributing project authors may
# be found in the AUTHORS file in the root of the source tree.

import("../../webrtc.gni")

rtc_library("flat_containers_internal") {
  sources = [
    "flat_tree.cc",
    "flat_tree.h",
    "invoke.h",
    "move_only_int.h",
  ]
  deps = [
    "..:checks",
    "../system:no_unique_address",
    "//third_party/abseil-cpp/absl/algorithm:container",
  ]
  visibility = [ ":*" ]
}

rtc_source_set("flat_set") {
  sources = [ "flat_set.h" ]
  deps = [ ":flat_containers_internal" ]
}

rtc_source_set("flat_map") {
  sources = [ "flat_map.h" ]
  deps = [
    ":flat_containers_internal",
    "..:checks",
  ]
}

if (rtc_include_tests) {
  rtc_cc_test("flat_map_unittest") {
    sources = [ "flat_map_unittest.cc" ]
    deps = [
      ":flat_containers_internal",
      ":flat_map",
      "../../test:test_support",
      "//testing/gmock",
      "//testing/gtest",
      "//third_party/abseil-cpp/absl/algorithm:container",
      "//third_party/abseil-cpp/absl/strings:string_view",
    ]
  }

  rtc_cc_test("flat_set_unittest") {
    sources = [ "flat_set_unittest.cc" ]
    deps = [
      ":flat_containers_internal",
      ":flat_set",
      "../../test:test_support",
      "//testing/gmock",
      "//testing/gtest",
    ]
  }

  rtc_cc_test("flat_tree_unittest") {
    sources = [ "flat_tree_unittest.cc" ]
    deps = [
      ":flat_containers_internal",
      "../../test:test_support",
      "//testing/gmock",
      "//testing/gtest",
      "//third_party/abseil-cpp/absl/algorithm:container",
    ]
  }
}
