# Copyright 2017 The Bazel Authors. All rights reserved. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. """Skylib module containing functions that operate on collections.""" def _after_each(separator, iterable): """Inserts `separator` after each item in `iterable`. Args: separator: The value to insert after each item in `iterable`. iterable: The list into which to intersperse the separator. Returns: A new list with `separator` after each item in `iterable`. """ result = [] for x in iterable: result.append(x) result.append(separator) return result def _before_each(separator, iterable): """Inserts `separator` before each item in `iterable`. Args: separator: The value to insert before each item in `iterable`. iterable: The list into which to intersperse the separator. Returns: A new list with `separator` before each item in `iterable`. """ result = [] for x in iterable: result.append(separator) result.append(x) return result def _uniq(iterable): """Returns a list of unique elements in `iterable`. Requires all the elements to be hashable. Args: iterable: An iterable to filter. Returns: A new list with all unique elements from `iterable`. """ unique_elements = {element: None for element in iterable} # list() used here for python3 compatibility. # TODO(bazel-team): Remove when testing frameworks no longer require python compatibility. return list(unique_elements.keys()) collections = struct( after_each = _after_each, before_each = _before_each, uniq = _uniq, )