[http_server] Simplify DRT node and table #132
                
     Draft
            
            
          
  Add this suggestion to a batch that can be applied as a single commit.
  This suggestion is invalid because no changes were made to the code.
  Suggestions cannot be applied while the pull request is closed.
  Suggestions cannot be applied while viewing a subset of changes.
  Only one suggestion per line can be applied in a batch.
  Add this suggestion to a batch that can be applied as a single commit.
  Applying suggestions on deleted lines is not supported.
  You must change the existing code in this line in order to create a valid suggestion.
  Outdated suggestions cannot be applied.
  This suggestion has been applied or marked resolved.
  Suggestions cannot be applied from pending reviews.
  Suggestions cannot be applied on multi-line comments.
  Suggestions cannot be applied while the pull request is queued to merge.
  Suggestion cannot be applied right now. Please check back later.
  
    
  
    
When I see the
std::vecotr<std::shared_ptr<drt_node>>andstd::vector<std::shared_ptr<std::string>>as thedrt_nodeanddynamic_routing_table's members respectively, I cannot help wondering why theshared_ptr<T>are needed here. Later I realized the instance of the DRT table is allowed to copy therefore we need to keep its objects being shared across all instances. Somehow I still think it is a waste to haveshared_ptr<T>manage each small object.This PR includes
unordered_set<string>to keep the strings other thanstd::vector<std::shared_ptr<std::string>>.unordered_set<string>is more straightforward and able to get rid of redundant duplicates automatically.drt_node_poolwrapping thevector<unique_ptr<drt_node>>and its instance is shared across all instances ofdrt_nodeto manage the lifetime of new drt_node instances.dynamic_routing_tableis to hold oneshared_ptr<dynamic_routing_table_data>to let one shared_ptr manage one big object other than multiple shared_ptrs manage multple small objects.This PR is posted as draft to let @matt-42 have a review first. Will squash to one single commit before final merge.