From: Yedidya Feldblum Date: Sat, 20 Jan 2018 00:21:57 +0000 (-0800) Subject: Remove unsafe tag and add presorted tag X-Git-Tag: v2018.01.22.00~1 X-Git-Url: http://plrg.eecs.uci.edu/git/?p=folly.git;a=commitdiff_plain;h=e52b296424c9441b5595906674045e04c6ccf24a Remove unsafe tag and add presorted tag 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 --- diff --git a/folly/Utility.h b/folly/Utility.h index 94141c18..54817a71 100644 --- a/folly/Utility.h +++ b/folly/Utility.h @@ -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 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 alist) { + * void takes_numbers(folly::presorted_t, std::vector 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. diff --git a/folly/sorted_vector_types.h b/folly/sorted_vector_types.h index 06d238ff..2c92d50a 100644 --- a/folly/sorted_vector_types.h +++ b/folly/sorted_vector_types.h @@ -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()) {