/* */ #ifndef _D_FEATURE_CONFIG_H_ #define _D_FEATURE_CONFIG_H_ #include "common.h" #include #include #include namespace aria2 { typedef std::map PortMap; typedef std::map FeatureMap; class FeatureConfig { private: static FeatureConfig* featureConfig; PortMap defaultPorts; FeatureMap supportedFeatures; std::deque features; FeatureConfig(); ~FeatureConfig() {} public: static FeatureConfig* getInstance() { if(!featureConfig) { featureConfig = new FeatureConfig(); } return featureConfig; } static void release() { delete featureConfig; featureConfig = 0; } int32_t getDefaultPort(const std::string& protocol) const { PortMap::const_iterator itr = defaultPorts.find(protocol); if(itr == defaultPorts.end()) { return 0; } else { return itr->second; } } bool isSupported(const std::string& feature) const { FeatureMap::const_iterator itr = supportedFeatures.find(feature); if(itr == supportedFeatures.end()) { return false; } else { return itr->second; } } const std::deque& getFeatures() const { return features; } std::string getConfigurationSummary() const { std::string summary; for(std::deque::const_iterator itr = features.begin(); itr != features.end(); itr++) { summary += *itr; if(isSupported(*itr)) { summary += ": yes"; } else { summary += ": no"; } summary += "\n"; } return summary; } }; } // namespace aria2 #endif // _D_FEATURE_CONFIG_H_