Remove unsafe tag and add presorted tag
authorYedidya Feldblum <yfeldblum@fb.com>
Sat, 20 Jan 2018 00:21:57 +0000 (16:21 -0800)
committerFacebook Github Bot <facebook-github-bot@users.noreply.github.com>
Sat, 20 Jan 2018 00:43:11 +0000 (16:43 -0800)
Summary:
[Folly] Remove `unsafe` tag and add `presorted` tag.

There are varieties of unsafety, so let us be more explicit about which variety of unsafety is invoked in each case.

Differential Revision: D6758520

fbshipit-source-id: d198a3c7601971460f91acc7787c9da02ae283c0

folly/Utility.h
folly/sorted_vector_types.h

index 94141c181c4f56b4980c59e2938d9a0ebf27598c..54817a7101944ccf565fdce501d200960cef165d 100644 (file)
@@ -263,26 +263,25 @@ struct initlist_construct_t {};
 constexpr initlist_construct_t initlist_construct{};
 
 /**
- * A generic tag type to indicate that some constructor or method is in some way
- * unsafe and should be used only with extreme care and with full test coverage,
- * if ever.
+ * A generic tag type to indicate that some constructor or method accepts a
+ * presorted container.
  *
  * Example:
  *
  *  void takes_numbers(std::vector<int> alist) {
  *    std::sort(alist.begin(), alist.end());
- *    takes_numbers_assume_sorted(folly::unsafe, alist);
+ *    takes_numbers_assume_sorted(folly::presorted, alist);
  *  }
  *
- *  void takes_numbers_assume_sorted(folly::unsafe_t, std::vector<int> alist) {
+ *  void takes_numbers(folly::presorted_t, std::vector<int> alist) {
  *    assert(std::is_sorted(alist.begin(), alist.end())); // debug mode only
  *    for (i : alist) {
  *      // some behavior which is defined and safe only when alist is sorted ...
  *    }
  *  }
  */
-struct unsafe_t {};
-constexpr unsafe_t unsafe{};
+struct presorted_t {};
+constexpr presorted_t presorted{};
 
 /**
  * A simple function object that passes its argument through unchanged.
index 06d238ffa13518387364389f5664241b8f81ebed..2c92d50ab06a17956dda254a75939058afa9f1f5 100644 (file)
@@ -297,21 +297,21 @@ class sorted_vector_set
       Container&& container,
       const Compare& comp = Compare())
       : sorted_vector_set(
-            unsafe,
+            presorted,
             detail::as_sorted(std::move(container), comp),
             comp) {}
 
   // Construct a sorted_vector_set by stealing the storage of a prefilled
-  // container. The container must be sorted, as unsafe_t hints. This supports
+  // container. The container must be sorted, as presorted_t hints. Supports
   // bulk construction of sorted_vector_set with zero allocations, not counting
   // those performed by the caller. (The iterator range constructor performs at
   // least one allocation).
   //
-  // Note that `sorted_vector_set(unsafe_t, const Container& container)` is not
-  // provided, since the purpose of this constructor is to avoid an unnecessary
+  // Note that `sorted_vector_set(presorted_t, const Container& container)` is
+  // not provided, since the purpose of this constructor is to avoid an extra
   // copy.
   sorted_vector_set(
-      unsafe_t,
+      presorted_t,
       Container&& container,
       const Compare& comp = Compare())
       : m_(comp, container.get_allocator()) {
@@ -626,21 +626,21 @@ class sorted_vector_map
       Container&& container,
       const Compare& comp = Compare())
       : sorted_vector_map(
-            unsafe,
+            presorted,
             detail::as_sorted(std::move(container), value_compare(comp)),
             comp) {}
 
   // Construct a sorted_vector_map by stealing the storage of a prefilled
-  // container. The container must be sorted, as unsafe_t hints. This supports
+  // container. The container must be sorted, as presorted_t hints. S supports
   // bulk construction of sorted_vector_map with zero allocations, not counting
   // those performed by the caller. (The iterator range constructor performs at
   // least one allocation).
   //
-  // Note that `sorted_vector_map(unsafe_t, const Container& container)` is not
-  // provided, since the purpose of this constructor is to avoid an unnecessary
+  // Note that `sorted_vector_map(presorted_t, const Container& container)` is
+  // not provided, since the purpose of this constructor is to avoid an extra
   // copy.
   sorted_vector_map(
-      unsafe_t,
+      presorted_t,
       Container&& container,
       const Compare& comp = Compare())
       : m_(value_compare(comp), container.get_allocator()) {