#ifndef api_h #define api_h 1 namespace as // espacio de nombres de la asignatura { class fiber // clase que representa una hebra tipo usuario { public: class id // identificador de fiber { public: id(const void *p); // ¿qué dirección usar? operator const void *() const; // comparación e impresión }; fiber() = default; // fibra vacía template explicit fiber(Callable &&, Args &&...); // constructor principal fiber(const fiber &) = delete; // copias prohibidas fiber &operator=(const fiber &) = delete; // copias prohibidas fiber(fiber &&); // constructor de movimiento fiber &operator=(fiber &&); // copia de movimiento ~fiber(); // destructor void detach(); // separa la fibra id get_id() const; // devuelve el identificador de la fibra void join(); // espera a que la fibra termine bool joinable() const; // cierto si no es vacía ni separada }; // class fiber namespace this_fiber { using fiber::id; id get_id(); void yield(); } // namespace this_fiber } // namespace as #endif // api_h