From db87b617e93d3caeb1cdb123841cd2c8be20fa0f Mon Sep 17 00:00:00 2001 From: Artur Laksberg Date: Thu, 22 Oct 2015 12:49:07 -0700 Subject: [PATCH 01/11] Fixed issue #99 --- main.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/main.html b/main.html index e4f0ad7..86f4bc3 100644 --- a/main.html +++ b/main.html @@ -194,7 +194,7 @@

Feature-testing recommendations (Informative)

atomic_smart_pointers 201505 - <experimental/atomics> + <experimental/atomics> From 7c05a2241447f3a08dbdbe7a7df36d2aaa74a20b Mon Sep 17 00:00:00 2001 From: Artur Laksberg Date: Thu, 22 Oct 2015 14:24:55 -0700 Subject: [PATCH 02/11] Update front page to "DTS" format --- main.html | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/main.html b/main.html index 86f4bc3..d05cd03 100644 --- a/main.html +++ b/main.html @@ -2,13 +2,18 @@ + + + + - -N4501 - + +N???? + Artur Laksberg
Microsoft Corp.
From 0bfe21f402283939db9b3e722c8f157e7ef380f8 Mon Sep 17 00:00:00 2001 From: Artur Laksberg Date: Thu, 22 Oct 2015 14:25:57 -0700 Subject: [PATCH 03/11] Incorporate NB comments --- atomic_smart_ptr.html | 8 ++++---- future.html | 13 ++++++++++--- latch_barrier.html | 20 +++++++++++++++----- 3 files changed, 29 insertions(+), 12 deletions(-) diff --git a/atomic_smart_ptr.html b/atomic_smart_ptr.html index 711bb0f..b46523a 100644 --- a/atomic_smart_ptr.html +++ b/atomic_smart_ptr.html @@ -90,8 +90,8 @@

Class template atomic_shared_ptr

constexpr atomic_shared_ptr() noexcept = default; atomic_shared_ptr(shared_ptr<T>) noexcept; atomic_shared_ptr(const atomic_shared_ptr&) = delete; - atomic_shared_ptr& operator=(const atomic_shared_ptr&) = delete; - atomic_shared_ptr& operator=(shared_ptr<T>) noexcept; + atomic_shared_ptr&void operator=(const atomic_shared_ptr&) = delete; + atomic_shared_ptr&void operator=(shared_ptr<T>) noexcept; }; } // namespace concurrency_v1 } // namespace experimental @@ -142,8 +142,8 @@

Class template atomic_weak_ptr

constexpr atomic_weak_ptr() noexcept = default; atomic_weak_ptr(weak_ptr<T>) noexcept; atomic_weak_ptr(const atomic_weak_ptr&) = delete; - atomic_weak_ptr& operator=(const atomic_weak_ptr&) = delete; - atomic_weak_ptr& operator=(weak_ptr<T>) noexcept; + atomic_shared_ptr&void operator=(const atomic_weak_ptr&) = delete; + atomic_shared_ptr&void operator=(weak_ptr<T>) noexcept; }; } // namespace concurrency_v1 } // namespace experimental diff --git a/future.html b/future.html index 27ce0af..07f11fb 100644 --- a/future.html +++ b/future.html @@ -226,7 +226,7 @@

Class template future

valid() == true on the future returned from then. In case of implicit unwrapping, the validity of the future returned from - then cannot be established until after the completion of the + thenfunc cannot be established until after the completion of the continuation. If it is not valid, the resulting future becomes ready with an exception of type std::future_error, with an error condition of std::future_errc::broken_promise. @@ -369,6 +369,7 @@

Class template shared_future

valid() == true on the original shared_future object. valid() == true on the future returned from then. + In case of implicit unwrapping, the validity of the future returned from then cannot be established until after the completion of the @@ -376,6 +377,7 @@

Class template shared_future

becomes ready with an exception of type std::future_error, with an error condition of std::future_errc::broken_promise. +
@@ -478,8 +480,13 @@

Function template when_all

  • A new shared state containing a Sequence is - created, where Sequence is either vector or - tuple based on the overload, as specified above. + created, where Sequence is + + either vector or + tuple based on the overload, as specified above. + + a vector for the first overload and a + tuple for the second overload. A new future object that refers to that shared state is created and returned from when_all. diff --git a/latch_barrier.html b/latch_barrier.html index 7f6a06c..ffdfe31 100644 --- a/latch_barrier.html +++ b/latch_barrier.html @@ -42,7 +42,7 @@

    Header <experimental/latch> synopsis

    void count_down_and_wait(); - void count_down(ptrdiff_t n); + void count_down(ptrdiff_t n = 1); bool is_ready() const noexcept; void wait() const; @@ -87,7 +87,7 @@

    Class latch

    - void count_down(ptrdiff_t n); + void count_down(ptrdiff_t n = 1); counter_ >= n and n >= 0. Decrements counter_ by n. Does not block. Synchronizes with all calls that block on this latch and with all is_ready calls on this latch that return true. @@ -145,7 +145,19 @@

    Barrier types

    void arrive_and_drop(); The current thread is a member of the set of participating threads. - Either arrives at the barrier's synchronization point and then removes the current thread from the set of participating threads, or just removes the current thread from the set of participating threads. Removing the current thread from the set of participating threads can cause the completion phase to start. + + + Either arrives at the barrier's synchronization point and then removes the current thread from the set of participating threads, or just removes the current thread from the set of participating threads. Removing the current thread from the set of participating threads can cause the completion phase to start. + + + Removes the current thread from the set of participating threads. If all other + participating threads are blocked at the synchronization point, the completion + phase will start. It is unspecified whether the function blocks until + the completion phase has ended. If the function blocks, the calling + thread may be chosen to execute the completion phase. + + + The call to arrive_and_drop() synchronizes with the start of the completion phase. Nothing. If all participating threads call arrive_and_drop(), any further operations on the barrier are undefined, apart from calling the destructor. @@ -184,8 +196,6 @@

    Class barrier

    barrier& operator=(const barrier&) = delete; ~barrier(); - - void arrive_and_wait(); void arrive_and_drop(); From 13f7952ac1912b9353a36410a5270a7a1ddd3281 Mon Sep 17 00:00:00 2001 From: Artur Laksberg Date: Thu, 22 Oct 2015 14:26:13 -0700 Subject: [PATCH 04/11] Full paper after NB comments --- submit/N4538_after_NB_comments.htm | 3292 ++++++++++++++++++++++++++++ 1 file changed, 3292 insertions(+) create mode 100644 submit/N4538_after_NB_comments.htm diff --git a/submit/N4538_after_NB_comments.htm b/submit/N4538_after_NB_comments.htm new file mode 100644 index 0000000..e20ce9c --- /dev/null +++ b/submit/N4538_after_NB_comments.htm @@ -0,0 +1,3292 @@ + + + + + + + + + +Codestin Search App + + + + + + +
    +
    + + ISO/IEC JTC1 SC22 WG21 N????
    + Date:
    + + + ISO/IEC DTS
    + + + + ISO/IEC JTC1 SC22 WG21
    + Secretariat: ANSI +
    +
    +

    Programming Languages — Technical Specification for C++ Extensions for Concurrency

    + +
    +
    +
    Warning
    +

    This document is not an ISO International Standard. It is distributed for review and comment. It is + subject to change without notice and may not be referred to as an International Standard. +

    +

    Recipients of this draft are invited to submit, with their comments, notification of any relevant + patent rights of which they are aware and to provide supporting documentation.

    +
    + +
    +
    + +
    + + + +
    + + + + + + + + + + + + +
    +
    1

    General

    [general]
    + + + + + + + +
    +
    1.1

    Namespaces, headers, and modifications to standard classes

    [general.namespaces]
    + + + + + +

    Since the extensions described in this technical specification + are experimental and not part of the C++ standard library, they + should not be declared directly within namespace + std. + Unless otherwise specified, all components described in this technical specification either: +

    + +
      +
    • modify an existing interface in the C++ Standard Library in-place,
    • +
    • + are declared in a namespace whose name appends ::experimental::concurrency_v1 + to a namespace defined in the C++ Standard Library, + such as std, or +
    • +
    • + are declared in a subnamespace of a namespace described in the previous bullet, + whose name is not the same as an existing subnamespace of namespace std. +
    • +
    + +

    Each header described in this technical + specification shall import the contents of + std::experimental::concurrency_v1 into + std::experimental as if by

    + + +
    namespace std {
    +  namespace experimental {
    +    inline namespace concurrency_v1 {}
    +  }
    +}
    + +

    Unless otherwise specified, references to other entities + described in this technical specification are assumed to be + qualified with std::experimental::concurrency_v1::, + and references to entities described in the standard are assumed + to be qualified with std::.

    + +

    Extensions that are expected to eventually be added to an + existing header <meow> are provided inside the + <experimental/meow> header, which shall include + the standard contents of <meow> as if by

    +
    #include <meow>
    + +

    New headers are also provided in the + <experimental/> directory, but without such an + #include.

    + + + + + + + + + + + +
    +
    + + + + +
    +
    1.2

    Future plans (Informative)

    [general.plans]
    + + + +

    This section describes tentative plans for future versions of + this technical specification and plans for moving content into + future versions of the C++ Standard.

    + +

    The C++ committee intends to release a new version of this + technical specification approximately every year, containing the + library extensions we hope to add to a near-future version of the + C++ Standard. Future versions will define their contents in + std::experimental::concurrency_v2, + std::experimental::concurrency_v3, etc., with the + most recent implemented version inlined into + std::experimental.

    + +

    When an extension defined in this or a future version of this + technical specification represents enough existing practice, it + will be moved into the next version of the C++ Standard by + removing the experimental::concurrency_vN + segment of its namespace and by removing the + experimental/ prefix from its header's path.

    + +
    +
    + + + + +
    +
    1.3

    Feature-testing recommendations (Informative)

    [general.feature.test]
    + + + +

    + For the sake of improved portability between partial implementations of various C++ standards, + WG21 (the ISO technical committee for the C++ programming language) recommends + that implementers and programmers follow the guidelines in this section concerning feature-test macros. + [ Note: + WG21's SD-6 makes similar recommendations for the C++ Standard itself. + end note ] + +

    + +

    + Implementers who provide a new standard feature should define a +macro with the recommended name, + in the same circumstances under which the feature is available +(for example, taking into account relevant command-line options), + to indicate the presence of support for that feature. + Implementers should define that macro with the value specified in + the most recent version of this technical specification that they +have implemented. + The recommended macro name is "__cpp_lib_experimental_" followed by the string in the "Macro Name Suffix" column. +

    + +

    + Programmers who wish to determine whether a feature is available in an implementation should base that determination on + the presence of the header (determined with __has_include(<header/name>)) + and + the state of the macro with the recommended name. + (The absence of a tested feature may result in a program with +decreased functionality, or the relevant functionality may be provided +in a different way. + A program that strictly depends on support for a feature can just +try to use the feature unconditionally; + presumably, on an implementation lacking necessary support, +translation will fail.) +

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Table 2 — Significant features in this technical specification
    Doc. No.TitlePrimary SectionMacro Name SuffixValueHeader
    N4399Improvements to std::future<T> and Related APIs2future_continuations201505<experimental/future>
    N4204C++ Latches and Barriers3latch201505<experimental/latch>
    N4204C++ Latches and Barriers3barrier201505<experimental/barrier>
    N4260Atomic Smart Pointers4atomic_smart_pointers201505<experimental/atomics>
    + + +
    +
    + +
    +
    + + + + +
    +
    2

    Improvements to std::future<T> and Related APIs

    [futures]
    + + + + + + +
    +
    2.1

    General

    [futures.general]
    + + +

    + +The extensions proposed here are an evolution of the functionality of +std::future and std::shared_future. The extensions +enable wait-free composition of asynchronous operations. Class templates +std::promise and std::packaged_task are also updated +to be compatible with the updated std::future. + +

    + + +
    +
    + + + + +
    +
    2.2

    Header <experimental/future> synopsis

    [header.future.synop]
    + + + + + +
    #include <future>
    +
    +namespace std {
    +  namespace experimental {
    +  inline namespace concurrency_v1 {
    +
    +    template <class R> class promise;
    +    template <class R> class promise<R&>;
    +    template <> class promise<void>;
    +
    +    template <class R>
    +      void swap(promise<R>& x, promise<R>& y) noexcept;
    +
    +    template <class R> class future;
    +    template <class R> class future<R&>;
    +    template <> class future<void>;
    +    template <class R> class shared_future;
    +    template <class R> class shared_future<R&>;
    +    template <> class shared_future<void>;
    +
    +    template <class> class packaged_task; // undefined
    +    template <class R, class... ArgTypes>
    +      class packaged_task<R(ArgTypes...)>;
    +
    +    template <class R, class... ArgTypes>
    +      void swap(packaged_task<R(ArgTypes...)>&, packaged_task<R(ArgTypes...)>&) noexcept;
    +
    +    template <class T>
    +      see below make_ready_future(T&& value);
    +    future<void> make_ready_future();
    +
    +    template <class T>
    +      future<T> make_exceptional_future(exception_ptr ex);
    +    template <class T, class E>
    +      future<T> make_exceptional_future(E ex);
    +
    +    template <class InputIterator>
    +      see below when_all(InputIterator first, InputIterator last);
    +    template <class... Futures>
    +      see below when_all(Futures&&... futures);
    +
    +    template <class Sequence>
    +    struct when_any_result;
    +
    +    template <class InputIterator>
    +      see below when_any(InputIterator first, InputIterator last);
    +    template <class... Futures>
    +      see below when_any(Futures&&... futures);
    +
    +  } // namespace concurrency_v1
    +  } // namespace experimental
    +
    +  template <class R, class Alloc>
    +    struct uses_allocator<experimental::promise<R>, Alloc>;
    +
    +  template <class R, class Alloc>
    +    struct uses_allocator<experimental::packaged_task<R>, Alloc>;
    +
    +} // namespace std
    + +
    +
    + + + + +
    +
    2.3

    Class template future

    [futures.unique_future]
    + + + +

    +The specifications of all declarations within this subclause 2.3 +and its subclauses are the same as the corresponding declarations, +as specified in C++14 §30.6.6, +unless explicitly specified otherwise. +

    + +
    namespace std {
    +  namespace experimental {
    +  inline namespace concurrency_v1 {
    +
    +    template <class R>
    +    class future {
    +    public:
    +      future() noexcept;
    +      future(future &&) noexcept;
    +      future(const future&) = delete;
    +      future(future<future<R>>&&) noexcept;
    +      ~future();
    +      future& operator=(const future&) = delete;
    +      future& operator=(future&&) noexcept;
    +      shared_future<R> share();
    +
    +      // retrieving the value
    +      see below get();
    +
    +      // functions to check state
    +      bool valid() const noexcept;
    +      bool is_ready() const;
    +
    +      void wait() const;
    +      template <class Rep, class Period>
    +        future_status wait_for(const chrono::duration<Rep, Period>& rel_time) const;
    +      template <class Clock, class Duration>
    +        future_status wait_until(const chrono::time_point<Clock, Duration>& abs_time) const;
    +
    +      // continuations
    +      template <class F>
    +        see below then(F&& func);
    +
    +    };
    +
    +  } // namespace concurrency_v1
    +  } // namespace experimental
    +  } // namespace std
    + + + +
    future(future<future<R>>&& rhs) noexcept;
    + +
    + + + + +
    Effects:
    Constructs a future object from the shared state referred to by + rhs. + + +The future becomes ready when one of the following occurs: +
      +
    • + Both the rhs and rhs.get() are ready. The value or the exception from rhs.get() is stored in the future's shared state. +
    • + +
    • + rhs is ready but rhs.get() is invalid. An exception of type std::future_error, with an error condition of std::future_errc::broken_promise is stored in the future's shared state. +
    • +
    + +
    +
    + + +
    Postconditions:
    +
      +
    • valid() == true.
    • +
    • rhs.valid() == false.
    • +
    +
    +
    + +
    +
    + +

    + +The member function template then provides a mechanism for attaching +a continuation to a future object, which will be executed +as specified below. + +

    + + +
    
    +template <class F>
    +see below then(F&& func);
    +
    + +
    + + + + + +
    Requires:
    INVOKE(DECAY_COPY (std::forward<F>(func)), std::move(*this)) shall be a valid expression.
    +
    + + + +
    Effects:
    + The function creates a shared state that is associated with the returned + future object. Additionally, +
      +
    • + When the object's shared state is ready, the continuation + INVOKE(DECAY_COPY(std::forward<F>(func)), std::move(*this)) is called on + an unspecified thread of execution with the call to + DECAY_COPY() being evaluated in the thread that called + then. +
    • +
    • + Any value returned from the continuation is stored as the result in the + shared state of the resulting future. Any exception propagated from the execution of + the continuation is stored as the exceptional result in the shared state of the resulting future. +
    • +
    +
    +
    + + + +
    Returns:
    + + + When result_of_t<decay_t<F>(future<R>)> + is future<R2>, for some type R2, the function returns future<R2>. + + Otherwise, the function returns future<result_of_t<decay_t<F>(future<R>)>>. + + [ Note: + + The rule above is referred to as implicit unwrapping. Without this rule, + the return type of then taking a callable returning a + future<R> would have been future<future<R>>. + This rule avoids such nested future objects. + The type of f2 below is + future<int> and not future<future<int>>: + + + [ Example: + +
    future<int> f1 = g();
    +future<int> f2 = f1.then([](future<int> f) {
    +                    future<int> f3 = h();
    +                    return f3;
    +                 });
    +
    + + end example ] +
    + + end note ] +
    + + +
    +
    + + + +
    Postconditions:
    + valid() == false on the original future. + valid() == true on the future returned from then. + [ Note: + + In case of implicit unwrapping, the validity of the future returned from + thenfunc cannot be established until after the completion of the + continuation. If it is not valid, the resulting future + becomes ready with an exception of type std::future_error, + with an error condition of std::future_errc::broken_promise. + + end note ] + +
    +
    + +
    +
    + + + +
    bool is_ready() const;
    + +
    + + + + +
    Returns:
    true if the shared state is ready, otherwise false.
    +
    + +
    +
    + + +
    +
    + + + + +
    +
    2.4

    Class template shared_future

    [futures.shared_future]
    + + +

    +The specifications of all declarations within this subclause 2.4 +and its subclauses are the same as the corresponding declarations, +as specified in C++14 §30.6.7, +unless explicitly specified otherwise. +

    + +
      namespace std {
    +  namespace experimental {
    +  inline namespace concurrency_v1 {
    +
    +    template <class R>
    +    class shared_future {
    +    public:
    +      shared_future() noexcept;
    +      shared_future(const shared_future&) noexcept;
    +      shared_future(future<R>&&) noexcept;
    +      shared_future(future<shared_future<R>>&& rhs) noexcept;
    +      ~shared_future();
    +      shared_future& operator=(const shared_future&);
    +      shared_future& operator=(shared_future&&) noexcept;
    +
    +      // retrieving the value
    +      see below get();
    +
    +      // functions to check state
    +      bool valid() const noexcept;
    +      bool is_ready() const;
    +
    +      void wait() const;
    +      template <class Rep, class Period>
    +        future_status wait_for(const chrono::duration<Rep, Period>& rel_time) const;
    +      template <class Clock, class Duration>
    +        future_status wait_until(const chrono::time_point<Clock, Duration>& abs_time) const;
    +
    +      // continuations
    +      template <class F>
    +        see below then(F&& func) const;
    +    };
    +
    +  } // namespace concurrency_v1
    +  } // namespace experimental
    +  } // namespace std
    +
    + + + +
    shared_future(future<shared_future<R>>&& rhs) noexcept;
    + +
    + + + + + +
    Effects:
    Constructs a shared_future object from the shared state referred to by + rhs. + +The shared_future becomes ready when one of the following occurs: +
      +
    • + Both the rhs and rhs.get() are ready. The value or the exception from rhs.get() is stored in the shared_future's shared state. +
    • + +
    • + rhs is ready but rhs.get() is invalid. + The shared_future stores an exception of type std::future_error, with an error condition of std::future_errc::broken_promise. +
    • +
    + +
    +
    + + +
    Postconditions:
    +
      +
    • valid() == true.
    • +
    • rhs.valid() == false.
    • +
    +
    +
    + +
    +
    + +

    +The member function template then provides a mechanism for attaching +a continuation to a shared_future object, which will be executed +as specified below. +

    + + + +
    
    +template <class F>
    +see below then(F&& func) const;
    +
    + +
    + + + + + +
    Requires:
    INVOKE(DECAY_COPY (std::forward<F>(func)), *this) shall be a valid expression.
    +
    + + + +
    Effects:
    + The function creates a shared state that is associated with the returned + future object. Additionally, +
      +
    • + When the object's shared state is ready, the continuation + INVOKE(DECAY_COPY(std::forward<F>(func)), *this) is called on + an unspecified thread of execution with the call to + DECAY_COPY() being evaluated in the thread that called + then. +
    • +
    • + Any value returned from the continuation is stored as the result in the + shared state of the resulting future. Any exception propagated from the execution of + the continuation is stored as the exceptional result in the shared state of the resulting future. +
    • +
    +
    +
    + + + +
    Returns:
    + + When result_of_t<decay_t<F>(const shared_future&)> + is future<R2>, for some type R2, the function returns future<R2>. + + Otherwise, the function returns future<result_of_t<decay_t<F>(const shared_future&)>>. + + [ Note: + + This analogous to future. See the notes on + the return type of future::then in 2.3. + + end note ] + + + + +
    +
    + + + +
    Postconditions:
    + valid() == true on the original shared_future object. + valid() == true on the future returned from then. + + + [ Note: + + In case of implicit unwrapping, the validity of the future returned from + then cannot be established until after the completion of the + continuation. In such case, the resulting future + becomes ready with an exception of type std::future_error, + with an error condition of std::future_errc::broken_promise. + + + end note ] + +
    +
    + +
    +
    + + + +
    bool is_ready() const;
    + +
    + + + + +
    Returns:
    true if the shared state is ready, otherwise false.
    +
    + +
    +
    + + +
    +
    + + + + +
    +
    2.5

    Class template promise

    [futures.promise]
    + + + +

    + The specifications of all declarations within this subclause 2.5 + and its subclauses are the same as the corresponding declarations, + as specified in C++14 §30.6.5, + unless explicitly specified otherwise. +

    +

    + The future returned by the function get_future is the one defined in the experimental + namespace (2.3). +

    + + +
    +
    + + + + +
    +
    2.6

    Class template packaged_task

    [futures.task]
    + + + +

    + The specifications of all declarations within this subclause 2.6 + and its subclauses are the same as the corresponding declarations, + as specified in C++14 §30.6.9, + unless explicitly specified otherwise. +

    +

    + The future returned by the function get_future is the one defined in the experimental + namespace (2.3). +

    + + +
    +
    + + + + + + + + +
    +
    2.7

    Function template when_all

    [futures.when_all]
    + + + +

    +The function template when_all creates a future object that +becomes ready when all elements in a set of future and shared_future objects +become ready. +

    + + + +
    
    +template <class InputIterator>
    +future<vector<typename iterator_traits<InputIterator>::value_type>>
    +when_all(InputIterator first, InputIterator last);
    +
    +template <class... Futures>
    +future<tuple<decay_t<Futures>...>> when_all(Futures&&... futures);
    +
    + +
    + + + + + +
    Requires:
    + + + All futures and shared_futures passed into + when_all must be in a valid state (i.e. valid() == true). +
    +
    + + + +
    Remarks:
    +
      +
    • + + The first overload shall not participate in overload resolution unless iterator_traits<InputIterator>::value_type is future<R> + or shared_future<R> for some type R. + +
    • +
    • + For the second overload, let Di be + decay_t<Fi>, and + let Ui be + remove_reference_t<Fi> + for each Fi in + Futures. This function shall not participate in overload resolution unless + for each i either Di + is a shared_future<Ri> + or Ui is a future<Ri>. +
    • +
    +
    +
    + + + +
    Effects:
    + + + +
      + +
    • + A new shared state containing a Sequence is + created, where Sequence is + + either vector or + tuple based on the overload, as specified above. + + a vector for the first overload and a + tuple for the second overload. + + A new future object that refers to that shared state is created + and returned from when_all. +
    • + +
    • + If the first overload is called with first == last, when_all + returns a future with an empty vector that is immediately + ready. +
    • + +
    • If the second overload is called with no arguments, + when_all returns a future<tuple<>> + that is immediately ready.
    • + +
    • + Otherwise, any futures are moved, and any shared_futures + are copied into, correspondingly, futures or + shared_futures of + Sequence in the shared state. +
    • + +
    • + The order of the objects in the shared state matches the order + of the arguments supplied to when_all. +
    • +
    • + Once all the futures and shared_futures supplied + to the call to when_all are ready, the resulting future, + as well as the futures and shared_futures + of the Sequence, are ready. +
    • +
    • + +
    • +
    • The shared state of the future returned by when_all + will not store an exception, but the + shared states of futures and shared_futures held in the shared state may.
    • +
    +
    +
    + + + +
    Postconditions:
    +
      +
    • For the returned future, valid() == true.
    • +
    • For all input futures, valid() == false.
    • +
    • For all input shared_futures, valid() == true.
    • +
    +
    +
    + + + +
    Returns:
    + +A future object that becomes ready when all of the input +futuresand shared_futures are ready. + +
    +
    + +
    +
    + +
    +
    + + + + + + + + +
    +
    2.8

    Class template when_any_result

    [futures.when_any_result]
    + + + +

    +The library provides a template for storing the result of when_any. +

    + +
    
    +template<class Sequence>
    +struct when_any_result {
    +    size_t index;
    +    Sequence futures;
    +};
    +
    + + +
    +
    + + + + +
    +
    2.9

    Function template when_any

    [futures.when_any]
    + + + +

    +The function template when_any creates a future object that +becomes ready when at least one element in a set of future and shared_future objects +becomes ready. +

    + + + +
    
    +template <class InputIterator>
    +future<when_any_result<vector<typename iterator_traits<InputIterator>::value_type>>>
    +when_any(InputIterator first, InputIterator last);
    +
    +template <class... Futures>
    +future<when_any_result<tuple<decay_t<Futures>...>>> when_any(Futures&&... futures);
    +
    + +
    + + + + + +
    Requires:
    + + + All futures and shared_futures passed into + when_all must be in a valid state (i.e. valid() == true). +
    +
    + + + +
    Remarks:
    +
      +
    • + + The first overload shall not participate in overload resolution unless iterator_traits<InputIterator>::value_type is future<R> + or shared_future<R> for some type R. + +
    • +
    • + For the second overload, let Di be + decay_t<Fi>, and + let Ui be + remove_reference_t<Fi> + for each Fi in + Futures. This function shall not participate in overload resolution unless + for each i either Di + is a shared_future<Ri> + or Ui is a future<Ri>. +
    • +
    +
    +
    + + + +
    Effects:
    + + + +
      + +
    • + A new shared state containing when_any_result<Sequence> is created, + where Sequence is a vector for the first overload and a + tuple for the second overload. + + A new future object that refers to that shared state is created and returned + from when_any. +
    • + +
    • + If the first overload is called with first == last, + when_any returns a future that is immediately ready. + The value of the index field of the when_any_result is + static_cast<size_t>(-1). The futures field is an empty vector. +
    • + +
    • If the second overload of is called with no arguments, + when_any returns a future that is immediately ready. + The value of the index field of the when_any_result is + static_cast<size_t>(-1). + The futures field is tuple<>. +
    • + +
    • + Otherwise, any futures are moved, and any shared_futures + are copied into, correspondingly, futures or + shared_futures of the futures member of + when_any_result<Sequence> in the shared state. + +
    • +
    • + The order of the objects in the futures shared state matches the order + of the arguments supplied to when_any. +
    • +
    • + + Once at least one of the futures or shared_futures supplied + to the call to when_any is ready, the resulting future + is ready. + + Given the result future f, + f.get().index is the position of the ready future + or shared_future in the + futures member of + when_any_result<Sequence> in the shared state. + +
    • + +
    • The shared state of the future returned by when_all + will not store an exception, but the + shared states of futures and shared_futures held in the shared state may.
    • + +
    +
    +
    + + + +
    Postconditions:
    +
      +
    • For the returned future, valid() == true.
    • +
    • For all input futures, valid() == false.
    • +
    • For all input shared_futures, valid() == true.
    • +
    +
    +
    + + + +
    Returns:
    +
      +
    • A future object that becomes ready when any of the input + futures and shared_futures are ready. +
    • +
    +
    +
    + + +
    +
    + +
    +
    + + + + +
    +
    2.10

    Function template make_ready_future

    [futures.make_ready_future]
    + + + + + + +
    
    +template <class T>
    +future<V> make_ready_future(T&& value);
    +
    +future<void> make_ready_future();
    +  
    + +
    + + +

    + Let U be decay_t<T>. Then V is X& if U equals + reference_wrapper<X>, otherwise V is U. +

    + + +
    Effects:
    + The function creates a shared state + that is immediately ready and returns a future associated + with that shared state. + For the first overload, the type of the shared state is V and the result is + constructed from std::forward<T>(value). + For the second overload, the type of the shared state is void. + + +
    +
    + + + + +
    Postconditions:
    + For the returned future, valid() == true and is_ready() == true. +
    +
    + +
    +
    + +
    +
    + + + + +
    +
    2.11

    Function template make_exceptional_future

    [futures.make_exceptional_future]
    + + + + + + +
    
    +template <class T>
    +future<T> make_exceptional_future(exception_ptr ex);
    +
    + +
    + + + + + +
    Effects:
    Equivalent to + + +
    promise<T> p;
    +p.set_exception(ex);
    +return p.get_future();
    +
    +
    +
    + + +
    +
    + + +
    + +
    + + + +
    template <class T, class E>
    +future<T> make_exceptional_future(E ex);
    +
    + + + +
    Effects:
    Equivalent to + + +
    promise<T> p;
    +p.set_exception(make_exception_ptr(ex));
    +return p.get_future();
    +
    +
    +
    + + +
    +
    + +
    +
    + + + + +
    +
    + + + + +
    +
    3

    Latches and Barriers

    [coordination]
    + + + + + + +
    +
    3.1

    General

    [coordination.general]
    + + +

    +This section describes various concepts related to thread coordination, and defines the latch, barrier and flex_barrier classes. +

    + + + +
    +
    + + + + +
    +
    3.2

    Terminology

    [thread.coordination.terminology]
    + + +

    +In this subclause, a synchronization point represents a point at which a thread may block until a given condition has been reached. +

    + +
    +
    + + + + +
    +
    3.3

    Latches

    [thread.coordination.latch]
    + + +

    +Latches are a thread coordination mechanism that allow one or more +threads to block until an operation is completed. An individual latch is + a single-use object; once the operation has been completed, the latch +cannot be reused. +

    + +
    +
    + + + + +
    +
    3.4

    Header <experimental/latch> synopsis

    [thread.coordination.latch.synopsis]
    + + +
    
    +namespace std {
    +namespace experimental {
    +inline namespace concurrency_v1 {
    +  class latch {
    +   public:
    +    explicit latch(ptrdiff_t count);
    +    latch(const latch&) = delete;
    +    
    +    latch& operator=(const latch&) = delete;
    +    ~latch();
    +
    +    
    +    void count_down_and_wait();
    +    void count_down(ptrdiff_t n = 1);
    +
    +    bool is_ready() const noexcept;
    +    void wait() const;
    +
    +   private:
    +    ptrdiff_t counter_; // exposition only
    +  };
    +} // namespace concurrency_v1
    +} // namespace experimental
    +} // namespace std
    +
    + +
    +
    + + + + +
    +
    3.5

    Class latch

    [coordination.latch.class]
    + + +

    +A latch maintains an internal counter_ that is initialized when the latch is created. Threads may block at a synchronization point waiting for counter_ to be decremented to 0. When counter_ reaches 0, all such blocked threads are released. +

    +

    +Calls to count_down_and_wait(), count_down(), wait(), and is_ready() behave as atomic operations. +

    + + + +
    explicit latch(ptrdiff_t count);
    + +
    + + + + +
    Requires:
    count >= 0.
    +
    + + +
    Synchronization:
    None.
    +
    + + +
    Postconditions:
    counter_ == count.
    +
    + +
    +
    + + + +
    ~latch();
    + +
    + + + + +
    Requires:
    No threads are blocked at the synchronization point.
    +
    + + +
    Remarks:
    May be called even if some threads have not yet returned from wait() or count_down_and_wait() provided that counter_ is 0. [ Note: + The destructor might not return until all threads have exited wait() or count_down_and_wait(). + end note ] +
    +
    + +
    +
    + + + +
    void count_down_and_wait();
    + +
    + + + + +
    Requires:
    counter_ > 0.
    +
    + + +
    Effects:
    Decrements counter_ by 1. Blocks at the synchronization point until counter_ reaches 0.
    +
    + + +
    Synchronization:
    Synchronizes with all calls that block on this latch and with all is_ready calls on this latch that return true.
    +
    + + +
    Throws:
    Nothing.
    +
    + +
    +
    + + + +
    void count_down(ptrdiff_t n = 1);
    + +
    + + + + +
    Requires:
    counter_ >= n and n >= 0.
    +
    + + +
    Effects:
    Decrements counter_ by n. Does not block.
    +
    + + +
    Synchronization:
    Synchronizes with all calls that block on this latch and with all is_ready calls on this latch that return true.
    +
    + + +
    Throws:
    Nothing.
    +
    + +
    +
    + + + +
    void wait() const;
    + +
    + + + + +
    Effects:
    If counter_ is 0, returns immediately. Otherwise, blocks the calling thread at the synchronization point until counter_ reaches 0.
    +
    + + +
    Throws:
    Nothing.
    +
    + + +
    +
    + + + +
    is_ready() const noexcept;
    + +
    + + + + +
    Returns:
    counter_ == 0. Does not block.
    +
    + +
    +
    + +
    +
    + + + + +
    +
    3.6

    Barrier types

    [thread.coordination.barrier]
    + + +

    +Barriers are a thread coordination mechanism that allow a set of participating threads + to block until an operation is completed. Unlike a latch, a barrier is +reusable: once the participating threads are released from a barrier's +synchronization point, they can re-use the same barrier. It is thus +useful for managing repeated tasks, or phases of a larger task, that are + handled by multiple threads. +

    +

    +The barrier types are the standard library types barrier and flex_barrier. They shall meet the requirements set out in this subclause. In this description, b denotes an object of a barrier type. +

    +

    +Each barrier type defines a completion phase as a (possibly empty) set of effects. When the member functions defined in this subclause arrive at the barrier's synchronization point, they have the following effects: +

    +
      +
    1. +The function blocks. +
    2. +
    3. +When all threads in the barrier's set of participating threads are +blocked at its synchronization point, one participating thread is +unblocked and executes the barrier type's completion phase. +
    4. +
    5. +When the completion phase is completed, all other participating threads +are unblocked. The end of the completion phase synchronizes with the +returns from all calls unblocked by its completion. +
    6. +
    +

    +The expression b.arrive_and_wait() shall be well-formed and have the following semantics: +

    + + +
    void arrive_and_wait();
    + +
    + + + + +
    Requires:
    The current thread is a member of the set of participating threads.
    +
    + + +
    Effects:
    Arrives at the barrier's synchronization point. [ Note: + It is safe for a thread to call arrive_and_wait() or arrive_and_drop() again immediately. It is not necessary to ensure that all blocked threads have exited arrive_and_wait() before one thread calls it again. + end note ] +
    +
    + + +
    Synchronization:
    The call to arrive_and_wait() synchronizes with the start of the completion phase.
    +
    + + +
    Throws:
    Nothing.
    +
    + +
    +
    +

    +The expression b.arrive_and_drop() shall be well-formed and have the following semantics: +

    + + +
    void arrive_and_drop();
    + +
    + + + + +
    Requires:
    The current thread is a member of the set of participating threads.
    +
    + + +
    Effects:
    + + Either arrives at the barrier's synchronization point and then +removes the current thread from the set of participating threads, or +just removes the current thread from the set of participating threads. [ Note: + Removing the current thread from the set of participating threads can cause the completion phase to start. + end note ] + + + + Removes the current thread from the set of participating threads. If all other + participating threads are blocked at the synchronization point, the completion + phase will start. It is unspecified whether the function blocks until + the completion phase has ended. [ Note: + If the function blocks, the calling + thread may be chosen to execute the completion phase. + end note ] + + +
    +
    + + + +
    Synchronization:
    The call to arrive_and_drop() synchronizes with the start of the completion phase.
    +
    + + +
    Throws:
    Nothing.
    +
    + + +
    Notes:
    If all participating threads call arrive_and_drop(), any further operations on the barrier are undefined, apart from calling the destructor. +If a thread that has called arrive_and_drop() calls another method on the same barrier, other than the destructor, the results are undefined.
    +
    + +
    +
    +

    +Calls to arrive_and_wait() and arrive_and_drop() never introduce data races with themselves or each other. +

    + +
    +
    + + + + +
    +
    3.7

    Header <experimental/barrier> synopsis

    [thread.coordination.barrier.synopsis]
    + + +
    
    +namespace std {
    +namespace experimental {
    +inline namespace concurrency_v1 {
    +  class barrier;
    +  class flex_barrier;
    +} // namespace concurrency_v1
    +} // namespace experimental
    +} // namespace std
    +
    + +
    +
    + + + + +
    +
    3.8

    Class barrier

    [coordination.barrier.class]
    + + +

    +barrier is a barrier type whose completion phase has no +effects. Its constructor takes a parameter representing the initial size + of its set of participating threads. +

    + +
    
    +class barrier {
    + public:
    +  explicit barrier(ptrdiff_t num_threads);
    +  barrier(const barrier&) = delete;
    +  
    +  barrier& operator=(const barrier&) = delete;
    +  ~barrier();
    +  
    +  
    +
    +  void arrive_and_wait();
    +  void arrive_and_drop();
    +};
    +
    + + + +
    explicit barrier(ptrdiff_t num_threads);
    + +
    + + + + +
    Requires:
    num_threads >= 0. [ Note: + If num_threads is zero, the barrier may only be destroyed. + end note ] +
    +
    + + +
    Effects:
    Initializes the barrier for num_threads participating threads. [ Note: + The set of participating threads is the first num_threads threads to arrive at the synchronization point. + end note ] +
    +
    + +
    +
    + + + +
    ~barrier();
    + +
    + + + + +
    Requires:
    No threads are blocked at the synchronization point.
    +
    + + +
    Effects:
    Destroys the barrier.
    +
    + +
    +
    + + +
    +
    + + + + +
    +
    3.9

    Class flex_barrier

    [coordination.flexbarrier.class]
    + + +

    +flex_barrier is a barrier type whose completion phase can be controlled +by a function object. +

    + +
    
    +class flex_barrier {
    + public:
    +  template <class F>
    +    flex_barrier(ptrdiff_t num_threads, F completion);
    +  explicit flex_barrier(ptrdiff_t num_threads);
    +  flex_barrier(const flex_barrier&) = delete;
    +  flex_barrier& operator=(const flex_barrier&) = delete;
    +
    +  ~flex_barrier();
    +
    +  void arrive_and_wait();
    +  void arrive_and_drop();
    +
    + private:
    +  function<ptrdiff_t()> completion_;  // exposition only
    +};
    +
    +
    +

    +The completion phase calls completion_(). If this returns -1, + then the set of participating threads is unchanged. Otherwise, the set +of participating threads becomes a new set with a size equal to the +returned value. [ Note: + If completion_() returns 0 then the set of participating threads becomes empty, and this object may only be destroyed. + end note ] + +

    + + +
    
    +template <class F>
    +flex_barrier(ptrdiff_t num_threads, F completion);
    +  
    + +
    + + + + +
    Requires:
    +
      +
    • + num_threads >= 0. +
    • + F shall be CopyConstructible. +
    • + completion shall be Callable (C++14 §[func.wrap.func]) with no arguments and return type ptrdiff_t. +
    • + Invoking completion shall return a value greater than or equal to -1 and shall not exit via an exception. +
    • +
    +
    + + + + + +
    Effects:
    + Initializes the flex_barrier for num_threads participating threads, + and initializes completion_ with std::move(completion). + [ Note: + The set of participating threads consists of the first num_threads threads to arrive at the + synchronization point. + end note ] + + [ Note: + If num_threads is 0 the set of participating threads is empty, and this object may only be destroyed. + end note ] + +
    +
    + + +
    +
    + + + +
    explicit flex_barrier(ptrdiff_t num_threads);
    + +
    + + + + + +
    Requires:
    num_threads >= 0.
    +
    + + +
    Effects:
    Has the same effect as creating a flex_barrier with num_threads and with a callable object whose invocation returns -1 and has no side effects.
    +
    + +
    +
    + + + +
    ~flex_barrier();
    + +
    + + + + +
    Requires:
    No threads are blocked at the synchronization point.
    +
    + + +
    Effects:
    Destroys the barrier.
    +
    + +
    +
    + + +
    +
    + + + +
    +
    + + + + +
    +
    4

    Atomic Smart Pointers

    [atomic]
    + + + + + + +
    +
    4.1

    General

    [atomic.smartptr.general]
    + + +

    + +This section provides alternatives to raw pointers for thread-safe atomic +pointer operations, and defines the atomic_shared_ptr and +atomic_weak_ptr class templates. + +

    +

    + +The class templates atomic_shared_ptr<T> and +atomic_weak_ptr<T> have the +corresponding non-atomic types shared_ptr<T> and +weak_ptr<T>. The template parameter T of +these class templates may be an incomplete type. + +

    +

    + +The behavior of all operations is as specified in +C++14 §29.6.5, +unless stated otherwise. + +

    + + +
    +
    + + + + +
    +
    4.2

    Header <experimental/atomic> synopsis

    [atomic.smartptr.synop]
    + + + +
    
    +#include <atomic>
    +
    +
    +namespace std {
    +namespace experimental {
    +inline namespace concurrency_v1 {
    +
    +  template <class T> struct atomic_shared_ptr;
    +  template <class T> struct atomic_weak_ptr;
    +
    +} // namespace concurrency_v1
    +} // namespace experimental
    +} // namespace st
    +
    +
    +
    + + +
    +
    + + + + +
    +
    4.3

    Class template atomic_shared_ptr

    [atomic.shared_ptr]
    + + + +
    
    +namespace std {
    +  namespace experimental {
    +  inline namespace concurrency_v1 {
    +
    +  template <class T> struct atomic_shared_ptr {
    +    bool is_lock_free() const noexcept;
    +    void store(shared_ptr<T>, memory_order = memory_order_seq_cst) noexcept;
    +    shared_ptr<T> load(memory_order = memory_order_seq_cst) const noexcept;
    +    operator shared_ptr<T>() const noexcept;
    +    
    +    shared_ptr<T> exchange(shared_ptr<T>, 
    +      memory_order = memory_order_seq_cst) noexcept;
    +    
    +    bool compare_exchange_weak(shared_ptr<T>&, const shared_ptr<T>&,
    +      memory_order, memory_order) noexcept;
    +    bool compare_exchange_weak(shared_ptr<T>&, shared_ptr<T>&&, 
    +      memory_order,  memory_order) noexcept;
    +    bool compare_exchange_weak(shared_ptr<T>&, const shared_ptr<T>&,
    +      memory_order = memory_order_seq_cst) noexcept;
    +    bool compare_exchange_weak(shared_ptr<T>&, shared_ptr<T>&&, 
    +      memory_order = memory_order_seq_cst) noexcept;
    +
    +    bool compare_exchange_strong(shared_ptr<T>&, const shared_ptr<T>&,
    +      memory_order, memory_order) noexcept;
    +    bool compare_exchange_strong(shared_ptr<T>&, shared_ptr<T>&&,
    +      memory_order, memory_order) noexcept;
    +    bool compare_exchange_strong(shared_ptr<T>&, const shared_ptr<T>&,
    +      memory_order = memory_order_seq_cst) noexcept;
    +    bool compare_exchange_strong(shared_ptr<T>&, shared_ptr<T>&&, 
    +      memory_order = memory_order_seq_cst) noexcept;
    +
    +    constexpr atomic_shared_ptr() noexcept = default;
    +    atomic_shared_ptr(shared_ptr<T>) noexcept;
    +    atomic_shared_ptr(const atomic_shared_ptr&) = delete;
    +    atomic_shared_ptr&void operator=(const atomic_shared_ptr&) = delete;
    +    atomic_shared_ptr&void operator=(shared_ptr<T>) noexcept;
    +  };
    +  } // namespace concurrency_v1
    +  } // namespace experimental
    +} // namespace std
    +
    + + +
    constexpr atomic_shared_ptr() noexcept = default;
    + +
    + + + + +
    Effects:
    Initializes the atomic object to an empty value.
    +
    + +
    +
    + + +
    +
    + + + + +
    +
    4.4

    Class template atomic_weak_ptr

    [atomic.weak_ptr]
    + + + +
    
    +namespace std {
    +  namespace experimental {
    +  inline namespace concurrency_v1 {
    +
    +  template <class T> struct atomic_weak_ptr {
    +    bool is_lock_free() const noexcept;
    +    void store(weak_ptr<T>, memory_order = memory_order_seq_cst) noexcept;
    +    weak_ptr<T> load(memory_order = memory_order_seq_cst) const noexcept;
    +    operator weak_ptr<T>() const noexcept;
    +
    +    weak_ptr<T> exchange(weak_ptr<T>,
    +      memory_order = memory_order_seq_cst) noexcept;
    +
    +    bool compare_exchange_weak(weak_ptr<T>&, const weak_ptr<T>&,
    +      memory_order, memory_order) noexcept;
    +    bool compare_exchange_weak(weak_ptr<T>&, weak_ptr<T>&&,
    +      memory_order, memory_order) noexcept;
    +    bool compare_exchange_weak(weak_ptr<T>&, const weak_ptr<T>&, 
    +      memory_order = memory_order_seq_cst) noexcept;
    +    bool compare_exchange_weak(weak_ptr<T>&, weak_ptr<T>&&, 
    +      memory_order = memory_order_seq_cst) noexcept;
    +
    +    bool compare_exchange_strong(weak_ptr<T>&, const weak_ptr<T>&, 
    +      memory_order, memory_order) noexcept;
    +    bool compare_exchange_strong(weak_ptr<T>&, weak_ptr<T>&&, 
    +      memory_order, memory_order) noexcept;
    +    bool compare_exchange_strong(weak_ptr<T>&, const weak_ptr<T>&, 
    +      memory_order = memory_order_seq_cst) noexcept;
    +    bool compare_exchange_strong(weak_ptr<T>&, weak_ptr<T>&&, 
    +      memory_order = memory_order_seq_cst) noexcept;
    +
    +    constexpr atomic_weak_ptr() noexcept = default;
    +    atomic_weak_ptr(weak_ptr<T>) noexcept;
    +    atomic_weak_ptr(const atomic_weak_ptr&) = delete;
    +    atomic_shared_ptr&void operator=(const atomic_weak_ptr&) = delete;
    +    atomic_shared_ptr&void operator=(weak_ptr<T>) noexcept;
    +  };
    +  } // namespace concurrency_v1
    +  } // namespace experimental
    +} // namespace std
    +
    +
    + + +
    constexpr atomic_weak_ptr() noexcept = default;
    + +
    + + + + +
    Effects:
    Initializes the atomic object to an empty value.
    +
    + +
    +
    +

    +When any operation on an atomic_shared_ptr or atomic_weak_ptr +causes an object to be destroyed or memory to be deallocated, that destruction or deallocation +shall be sequenced after the changes to the atomic object's state. +

    +

    +[ Note: + +This prevents potential deadlock if the atomic smart pointer operation is not +lock-free, such as by including a spinlock as part of the atomic object's state, +and the destruction or the deallocation may attempt to acquire a lock. + + end note ] + +

    +

    +[ Note: + +These types replace all known uses of the functions +in C++14 §20.8.2.6. + + end note ] + +

    + + +
    +
    + +
    +
    + + + + \ No newline at end of file From 6d0cdf4ab3e8fcf308bc67e66f3b8c38b54dfb96 Mon Sep 17 00:00:00 2001 From: Artur Laksberg Date: Thu, 22 Oct 2015 14:27:33 -0700 Subject: [PATCH 05/11] Update bower components --- .../core-action-icons/.bower.json | 14 - bower_components/core-action-icons/README.md | 8 - .../core-action-icons/action-icons.png | Bin 34087 -> 0 bytes .../core-action-icons/action-icons.svg | 1352 -- bower_components/core-ajax/.bower.json | 15 +- bower_components/core-ajax/README.md | 2 +- bower_components/core-ajax/bower.json | 7 +- bower_components/core-ajax/core-ajax.html | 619 +- bower_components/core-ajax/core-xhr.html | 80 +- bower_components/core-ajax/demo-progress.html | 65 + bower_components/core-ajax/demo.html | 4 +- bower_components/core-ajax/index.html | 3 +- bower_components/core-ajax/metadata.html | 23 + .../core-ajax/test/core-ajax-progress.html | 108 + .../core-ajax/test/core-ajax-race.html | 81 + .../core-ajax/test/core-ajax.html | 287 + bower_components/core-ajax/test/index.html | 17 + .../core-component-page/.bower.json | 14 +- .../core-component-page/README.md | 7 +- .../core-component-page/bower.json | 6 +- .../core-component-page.html | 6240 +------- .../core-component-page/demo.html | 2 +- .../core-component-page/index.html | 3 +- .../cxx-html-doc-framework/.bower.json | 18 +- .../cxx-html-doc-framework/README.md | 24 +- .../cxx-html-doc-framework/base.css | 100 +- .../cxx-html-doc-framework/bower.json | 6 +- .../cxx-html-doc-framework/clause.html | 17 +- .../definition-section.html | 12 +- .../definition-section.js | 2 +- .../cxx-html-doc-framework/ednote.html | 4 +- .../cxx-html-doc-framework/figure.html | 2 +- .../cxx-html-doc-framework/footnote.html | 19 +- .../cxx-html-doc-framework/foreword.html | 85 + .../cxx-html-doc-framework/framework.html | 2 + .../cxx-html-doc-framework/function.html | 4 +- .../cxx-html-doc-framework/publish.html | 20 +- .../cxx-html-doc-framework/publish.js | 48 +- .../cxx-html-doc-framework/section.html | 14 +- .../cxx-html-doc-framework/section.js | 19 +- .../cxx-html-doc-framework/table.html | 75 +- .../cxx-html-doc-framework/titlepage.html | 174 +- .../cxx-html-doc-framework/titlepage.js | 81 +- .../cxx-html-doc-framework/toc.html | 2 +- .../cxx-html-doc-framework/toc.js | 18 +- .../cxx-html-doc-framework/weak-break.html | 25 + bower_components/platform/.bower.json | 26 - bower_components/platform/AUTHORS | 9 - bower_components/platform/CONTRIBUTING.md | 73 - bower_components/platform/LICENSE | 27 - bower_components/platform/PATENTS | 23 - bower_components/platform/README.md | 6 - bower_components/platform/bower.json | 17 - bower_components/platform/build.log | 40 - bower_components/platform/platform.js | 17 - bower_components/platform/platform.js.map | 1 - bower_components/polymer-ajax/.bower.json | 18 - bower_components/polymer-ajax/AUTHORS | 9 - bower_components/polymer-ajax/CONTRIBUTING.md | 1 - bower_components/polymer-ajax/LICENSE | 27 - bower_components/polymer-ajax/PATENTS | 23 - bower_components/polymer-ajax/bower.json | 8 - bower_components/polymer-ajax/demo.html | 30 - bower_components/polymer-ajax/docs.json | 245 - bower_components/polymer-ajax/index.html | 64 - .../polymer-ajax/polymer-ajax.html | 256 - .../polymer-ajax/polymer-xhr.html | 96 - .../polymer-ajax/test/html/polymer-ajax.html | 30 - .../polymer-ajax/test/js/polymer-ajax.js | 9 - .../polymer-ajax/test/runner.html | 31 - bower_components/polymer/.bower.json | 29 +- bower_components/polymer/README.md | 14 +- bower_components/polymer/bower.json | 20 +- bower_components/polymer/build.log | 36 +- bower_components/polymer/layout.html | 286 + bower_components/polymer/polymer-body.html | 40 - bower_components/polymer/polymer.html | 5 +- bower_components/polymer/polymer.js | 11846 +++++++++++++++- bower_components/polymer/polymer.js.map | 1 - bower_components/polymer/polymer.min.js | 14 + bower_components/webcomponentsjs/.bower.json | 23 + .../webcomponentsjs/CustomElements.js | 634 + .../webcomponentsjs/CustomElements.min.js | 11 + .../webcomponentsjs/HTMLImports.js | 764 + .../webcomponentsjs/HTMLImports.min.js | 11 + bower_components/webcomponentsjs/README.md | 73 + bower_components/webcomponentsjs/ShadowDOM.js | 4277 ++++++ .../webcomponentsjs/ShadowDOM.min.js | 13 + bower_components/webcomponentsjs/bower.json | 14 + bower_components/webcomponentsjs/build.log | 31 + bower_components/webcomponentsjs/package.json | 31 + .../webcomponentsjs/webcomponents-lite.js | 1728 +++ .../webcomponentsjs/webcomponents-lite.min.js | 11 + .../webcomponentsjs/webcomponents.js | 6114 ++++++++ .../webcomponentsjs/webcomponents.min.js | 14 + 95 files changed, 27613 insertions(+), 9241 deletions(-) delete mode 100644 bower_components/core-action-icons/.bower.json delete mode 100644 bower_components/core-action-icons/README.md delete mode 100644 bower_components/core-action-icons/action-icons.png delete mode 100644 bower_components/core-action-icons/action-icons.svg create mode 100644 bower_components/core-ajax/demo-progress.html create mode 100644 bower_components/core-ajax/metadata.html create mode 100644 bower_components/core-ajax/test/core-ajax-progress.html create mode 100644 bower_components/core-ajax/test/core-ajax-race.html create mode 100644 bower_components/core-ajax/test/core-ajax.html create mode 100644 bower_components/core-ajax/test/index.html create mode 100644 bower_components/cxx-html-doc-framework/foreword.html create mode 100644 bower_components/cxx-html-doc-framework/weak-break.html delete mode 100644 bower_components/platform/.bower.json delete mode 100644 bower_components/platform/AUTHORS delete mode 100644 bower_components/platform/CONTRIBUTING.md delete mode 100644 bower_components/platform/LICENSE delete mode 100644 bower_components/platform/PATENTS delete mode 100644 bower_components/platform/README.md delete mode 100644 bower_components/platform/bower.json delete mode 100644 bower_components/platform/build.log delete mode 100644 bower_components/platform/platform.js delete mode 100644 bower_components/platform/platform.js.map delete mode 100644 bower_components/polymer-ajax/.bower.json delete mode 100644 bower_components/polymer-ajax/AUTHORS delete mode 100644 bower_components/polymer-ajax/CONTRIBUTING.md delete mode 100644 bower_components/polymer-ajax/LICENSE delete mode 100644 bower_components/polymer-ajax/PATENTS delete mode 100644 bower_components/polymer-ajax/bower.json delete mode 100644 bower_components/polymer-ajax/demo.html delete mode 100644 bower_components/polymer-ajax/docs.json delete mode 100644 bower_components/polymer-ajax/index.html delete mode 100644 bower_components/polymer-ajax/polymer-ajax.html delete mode 100644 bower_components/polymer-ajax/polymer-xhr.html delete mode 100644 bower_components/polymer-ajax/test/html/polymer-ajax.html delete mode 100644 bower_components/polymer-ajax/test/js/polymer-ajax.js delete mode 100644 bower_components/polymer-ajax/test/runner.html create mode 100644 bower_components/polymer/layout.html delete mode 100644 bower_components/polymer/polymer-body.html delete mode 100644 bower_components/polymer/polymer.js.map create mode 100644 bower_components/polymer/polymer.min.js create mode 100644 bower_components/webcomponentsjs/.bower.json create mode 100644 bower_components/webcomponentsjs/CustomElements.js create mode 100644 bower_components/webcomponentsjs/CustomElements.min.js create mode 100644 bower_components/webcomponentsjs/HTMLImports.js create mode 100644 bower_components/webcomponentsjs/HTMLImports.min.js create mode 100644 bower_components/webcomponentsjs/README.md create mode 100644 bower_components/webcomponentsjs/ShadowDOM.js create mode 100644 bower_components/webcomponentsjs/ShadowDOM.min.js create mode 100644 bower_components/webcomponentsjs/bower.json create mode 100644 bower_components/webcomponentsjs/build.log create mode 100644 bower_components/webcomponentsjs/package.json create mode 100644 bower_components/webcomponentsjs/webcomponents-lite.js create mode 100644 bower_components/webcomponentsjs/webcomponents-lite.min.js create mode 100644 bower_components/webcomponentsjs/webcomponents.js create mode 100644 bower_components/webcomponentsjs/webcomponents.min.js diff --git a/bower_components/core-action-icons/.bower.json b/bower_components/core-action-icons/.bower.json deleted file mode 100644 index 40ed053..0000000 --- a/bower_components/core-action-icons/.bower.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "name": "core-action-icons", - "homepage": "https://github.com/Polymer/core-action-icons", - "version": "0.2.3", - "_release": "0.2.3", - "_resolution": { - "type": "version", - "tag": "0.2.3", - "commit": "2dbce5513e3332498bd8b7838ba5f26b8579db92" - }, - "_source": "git://github.com/Polymer/core-action-icons.git", - "_target": "0.2.3", - "_originalSource": "Polymer/core-action-icons" -} \ No newline at end of file diff --git a/bower_components/core-action-icons/README.md b/bower_components/core-action-icons/README.md deleted file mode 100644 index 1f040fb..0000000 --- a/bower_components/core-action-icons/README.md +++ /dev/null @@ -1,8 +0,0 @@ -core-action-icons -================= - -This is a _resource_ component which contains image assets for the default core icon set. - -While HTML, JS, and CSS can be combined for production deployments by tools like Vulcanizer, some assets are easier to deliver as is. - -Projects using the default core icon set should include this component in deployments verbatim. diff --git a/bower_components/core-action-icons/action-icons.png b/bower_components/core-action-icons/action-icons.png deleted file mode 100644 index 64d08d0ba1d3766741e705e1fb3eb841a24ef43a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 34087 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 diff --git a/bower_components/core-action-icons/action-icons.svg b/bower_components/core-action-icons/action-icons.svg deleted file mode 100644 index 74fbc07..0000000 --- a/bower_components/core-action-icons/action-icons.svg +++ /dev/null @@ -1,1352 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/bower_components/core-ajax/.bower.json b/bower_components/core-ajax/.bower.json index 19dfa45..41a2c4f 100644 --- a/bower_components/core-ajax/.bower.json +++ b/bower_components/core-ajax/.bower.json @@ -2,17 +2,20 @@ "name": "core-ajax", "private": true, "dependencies": { - "polymer": "Polymer/polymer#0.2.3" + "polymer": "Polymer/polymer#^0.5.0" }, - "version": "0.2.3", + "devDependencies": { + "polymer-test-tools": "Polymer/polymer-test-tools#master" + }, + "version": "0.5.2", "homepage": "https://github.com/Polymer/core-ajax", - "_release": "0.2.3", + "_release": "0.5.2", "_resolution": { "type": "version", - "tag": "0.2.3", - "commit": "86ec30d097037ed3699556567bae6b09b553ce51" + "tag": "0.5.2", + "commit": "3ef7992d54e89e290b813a463950d9d8953160a1" }, "_source": "git://github.com/Polymer/core-ajax.git", - "_target": "0.2.3", + "_target": "0.5.2", "_originalSource": "Polymer/core-ajax" } \ No newline at end of file diff --git a/bower_components/core-ajax/README.md b/bower_components/core-ajax/README.md index 74d1ff1..a0a4145 100644 --- a/bower_components/core-ajax/README.md +++ b/bower_components/core-ajax/README.md @@ -1,4 +1,4 @@ core-ajax ========= -See the [component page](http://polymer.github.io/core-ajax) for more information. +See the [component page](http://polymer-project.org/docs/elements/core-elements.html#core-ajax) for more information. diff --git a/bower_components/core-ajax/bower.json b/bower_components/core-ajax/bower.json index 36e2029..8e68dc5 100644 --- a/bower_components/core-ajax/bower.json +++ b/bower_components/core-ajax/bower.json @@ -2,7 +2,10 @@ "name": "core-ajax", "private": true, "dependencies": { - "polymer": "Polymer/polymer#0.2.3" + "polymer": "Polymer/polymer#^0.5.0" }, - "version": "0.2.3" + "devDependencies": { + "polymer-test-tools": "Polymer/polymer-test-tools#master" + }, + "version": "0.5.2" } \ No newline at end of file diff --git a/bower_components/core-ajax/core-ajax.html b/bower_components/core-ajax/core-ajax.html index 272539b..c0ca0ad 100644 --- a/bower_components/core-ajax/core-ajax.html +++ b/bower_components/core-ajax/core-ajax.html @@ -18,9 +18,9 @@ params='{"alt":"json", "q":"chrome"}' handleAs="json" on-core-response="{{handleResponse}}"> - + With `auto` set to `true`, the element performs a request whenever -its `url` or `params` properties are changed. +its `url`, `params` or `body` properties are changed. Note: The `params` attribute must be double quoted JSON. @@ -31,262 +31,381 @@ @status beta @homepage github.io --> - + diff --git a/bower_components/core-ajax/core-xhr.html b/bower_components/core-ajax/core-xhr.html index c4c3652..dbc531b 100644 --- a/bower_components/core-ajax/core-xhr.html +++ b/bower_components/core-ajax/core-xhr.html @@ -22,48 +22,12 @@ - - - +