<commit_before>TODO List for Fiberized.IO
==========================

BUGS
----
* <del>scheduler::add_thread caused problem, disabled</del>
* <del>asio returns error_code with system_category, while make_error_code uses generic_category, which makes comparison fail</del>

Core
----

* Add signal handler to scheduler to handle Ctrl-C/Ctrl-D/...
* Refine `FIBERIZED_MAIN` macro if we have to determin thread number before starting scheduler
* <del>Complete `fibio::io::{udp, local_stream, local_datagram}`</del>
* Make `concurrent_queue` fully work between `fiber` and `not-a-fiber`
    * <del>c_q<fibers::mutex, fiber::c_v> can transfer data from outside to fiber, as long as there is no size limit(push won't block)</del>
    * <del>c_q<std::mutex, std::c_v> can transfer data from a fiber to outside, as long as there is no size limit(push won't block)</del>
    * Extra work is still needed to make both directions work with size_limit set
* Find a way to get stack track for uncaught exception in fiber
* <del>Future support</del>
* Logging
    * Async log (high throughput/low reliability)
    * Sync log (low throughput/high reliability)
    * Boost.Log integration (?)
    * Log4CXX/Log4CPP/Log4CPlus (?)
* async/await support (?), this is little hard as creating coroutine inside a fiber may interfere with fiber scheduling, need to find a clean solution to support this
* <del>Make sure `fibio::condition_variable` and `std::condition_variable` can be used to communicate between `fiber` and `not-a-fiber`</del>
    * <del>Make sure `not-a-fiber` can notify `fiber` via `fibio::condition_variable`</del>
    * <del>Make sure `fiber` can notify `not-a-fiber` via `std::condition_variable`</del>
* <del>Shared mutex(RWLock)</del>

Protocol
--------

* Test drive, start with a simple Redis client
* HTTP client
    * Cookie
    * Chunked response
* HTTP server framework
    * Chunked resquest (File upload, etc.)
    * Session store
    * WebSocket
    * RESTful service
* HTTP request router for HTTP server
* Connection pool
* HTTPS support
* <del>SSL support</del>

Utilities<commit_msg>update todo list<commit_after>TODO List for Fiberized.IO
==========================

BUGS
----
* <del>scheduler::add_thread caused problem, disabled(FIXED)</del>

Core
----

* Add signal handler to scheduler to handle Ctrl-C/Ctrl-D/...
* Refine `FIBERIZED_MAIN` macro if we have to determin thread number before starting scheduler
    * make this work under Windows
* Make `concurrent_queue` fully work between `fiber` and `not-a-fiber`
    * <del>c_q<fibers::mutex, fiber::c_v> can transfer data from outside to fiber, as long as there is no size limit(push won't block)</del>
    * <del>c_q<std::mutex, std::c_v> can transfer data from a fiber to outside, as long as there is no size limit(push won't block)</del>
    * Extra work is still needed to make both directions work with size_limit set
* Find a way to get stack track for uncaught exception in fiber
* Find a way to properly implement timeout for async ops
* <del>Future support(DONE)</del>
* Logging
    * Async log (high throughput/low reliability)
    * Sync log (low throughput/high reliability)
    * Boost.Log integration (?)
    * Log4CXX/Log4CPP/Log4CPlus (?)
* async/await support (?), this is little hard as creating coroutine inside a fiber may interfere with fiber scheduling, need to find a clean solution to support this
* <del>Make sure `fibio::condition_variable` and `std::condition_variable` can be used to communicate between `fiber` and `not-a-fiber`</del>
    * <del>Make sure `not-a-fiber` can notify `fiber` via `fibio::condition_variable`</del>
    * <del>Make sure `fiber` can notify `not-a-fiber` via `std::condition_variable`</del>
* Make sure `future` can work between `fiber` and `not-a-fiber`
* <del>Shared mutex(DONE)</del>
* Windows support
    * Windows handle stream(should work with some typedefs)
    * Windows std stream guard(should work by replacing fd 0,1,2 with handle STDIN,STDOUT,STDERR)
    * Windows Service control

Protocol
--------

* Test drive, start with a simple Redis client
* HTTP client
    * Cookie
    * Chunked response
* HTTP server framework
    * Chunked resquest (File upload, etc.)
    * Session store
    * WebSocket
    * RESTful service
* HTTP request router for HTTP server
* Connection pool
* HTTPS support
* <del>SSL support(DONE)</del>

Utilities
{'fraction_non_alphanumeric': 0.11583276216586703, 'fraction_numerical': 0.00205620287868403, 'mean_word_length': 4.24311377245509, 'pattern_counts': {'":': 0, '<': 47, '<?xml version=': 0, '>': 47, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '6446864', 'n_tokens_mistral': 1338, 'n_tokens_neox': 1302, 'n_words': 500}