From f5e30a64721ce8fb57c20106f829c0d57ca4ec01 Mon Sep 17 00:00:00 2001 From: Emmanuel Milou <emmanuel.milou@savoirfairelinux.com> Date: Mon, 21 Apr 2008 10:35:21 -0400 Subject: [PATCH] add poly logo + comments stuff --- doc/images/polytechnique.jpg | Bin 0 -> 55946 bytes src/audio/audiodevice.h | 5 +- src/audio/audiolayer.h | 6 +- src/audio/dtmf.h | 2 +- src/config/config.h | 266 +++++++++++++++++++---------------- 5 files changed, 150 insertions(+), 129 deletions(-) create mode 100644 doc/images/polytechnique.jpg diff --git a/doc/images/polytechnique.jpg b/doc/images/polytechnique.jpg new file mode 100644 index 0000000000000000000000000000000000000000..232b9ea23d3eb7b00c5de119d2505e0e8a06fcad GIT binary patch literal 55946 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 literal 0 HcmV?d00001 diff --git a/src/audio/audiodevice.h b/src/audio/audiodevice.h index 64c884be9a..ccc5840324 100644 --- a/src/audio/audiodevice.h +++ b/src/audio/audiodevice.h @@ -33,9 +33,8 @@ class AudioDevice { public: /** * Constructor - * @param id - * @param - * @param + * @param id Identifier + * @param name Name */ AudioDevice(int id, const std::string& name); diff --git a/src/audio/audiolayer.h b/src/audio/audiolayer.h index e56f5ad7a4..f303167348 100644 --- a/src/audio/audiolayer.h +++ b/src/audio/audiolayer.h @@ -127,8 +127,8 @@ class AudioLayer { /** * Send a chunk of data to the hardware buffer to start the playback * Copy data in the urgent buffer. - * @params buffer The buffer containing the data to be played ( ringtones ) - * @params toCopy The size of the buffer + * @param buffer The buffer containing the data to be played ( ringtones ) + * @param toCopy The size of the buffer * @return int The number of bytes copied in the urgent buffer */ int putUrgent(void* buffer, int toCopy); @@ -158,7 +158,7 @@ class AudioLayer { /** * Scan the sound card available on the system - * @param flag To indicate whether we are looking for capture devices or playback devices + * @param stream To indicate whether we are looking for capture devices or playback devices * SFL_PCM_CAPTURE * SFL_PCM_PLAYBACK * SFL_PCM_BOTH diff --git a/src/audio/dtmf.h b/src/audio/dtmf.h index 9041514d48..a456975178 100644 --- a/src/audio/dtmf.h +++ b/src/audio/dtmf.h @@ -35,7 +35,7 @@ class DTMF { public: /** * Create a new DTMF. - * @param samplingRate frequency of the sample (ex: 8000 hz) + * @param sampleRate frequency of the sample (ex: 8000 hz) */ DTMF (unsigned int sampleRate); diff --git a/src/config/config.h b/src/config/config.h index f937b332d2..5bcb9aa216 100644 --- a/src/config/config.h +++ b/src/config/config.h @@ -26,131 +26,153 @@ #include <list> /** - * Configuration namespace for ConfigTree object (like .ini files) + * @file config.h + * @brief Configuration namespace for ConfigTree object (like .ini files) */ namespace Conf { -class ConfigTreeItem; -typedef std::map<std::string, ConfigTreeItem> ItemMap; -typedef std::map<std::string, ItemMap*> SectionMap; -typedef std::list<std::string> TokenList; - -class ConfigTreeItemException { -public: - ConfigTreeItemException() {} - ~ConfigTreeItemException() {} -}; - -class ConfigTree; -class ConfigTreeIterator -{ -public: - TokenList begin(); - const TokenList& end() const { return _endToken; } - TokenList next(); - -private: - friend class ConfigTree; - ConfigTreeIterator(ConfigTree *configTree) : _tree(configTree) {} - - ConfigTree* _tree; - TokenList _endToken; - SectionMap::iterator _iter; - ItemMap::iterator _iterItem; -}; - -class ConfigTree { -public: - ConfigTree(); - ~ConfigTree(); - - void createSection(const std::string& section); - void removeSection(const std::string& section); - /** - * Return an array of strings, listing the sections of the config file - * - * This will be mainly used to filter which sections are an - * "Account" definition. - * - * @return array Strings of the sections - */ - TokenList getSections(); - - void addConfigTreeItem(const std::string& section, const ConfigTreeItem item); - /** - * Set a configuration value. - * - * @param section Write to this [section] of the .ini file - * @param itemName The itemName= in the .ini file - * @param value The value to assign to that itemName - */ - bool setConfigTreeItem(const std::string& section, const std::string& itemName, const std::string& value); - - /** - * Get a value. - * - * This function does all the validity tests, so none are needed throughout - * the program. - * - * @param section The name of the [section] in the .ini file. - * @param itemName The name of the item= in the .ini file. - * @return The value of the corresponding item. The default value if the section exists - * but the item doesn't. - */ - std::string getConfigTreeItemValue(const std::string& section, const std::string& itemName); - int getConfigTreeItemIntValue(const std::string& section, const std::string& itemName); - - /** - * Flush data to .ini file - */ - bool saveConfigTree(const std::string& fileName); - - /** - * Load data (and fill ConfigTree) from disk - */ - int populateFromFile(const std::string& fileName); - - bool getConfigTreeItemToken(const std::string& section, const std::string& itemName, TokenList& arg); - -private: - ConfigTreeItem* getConfigTreeItem(const std::string& section, const std::string& itemName); - - /** - * List of sections. Each sections has an ItemList as child - */ - SectionMap _sections; - friend class ConfigTreeIterator; - -public: - ConfigTreeIterator createIterator() { - return ConfigTreeIterator(this); - } -}; - -class ConfigTreeItem { -public: - ConfigTreeItem() : _defaultValue(""), _type("string") {} - // defaultvalue = value - ConfigTreeItem(const std::string& name, const std::string& value, const std::string& type) : - _name(name), _value(value), - _defaultValue(value), _type(type) {} - ConfigTreeItem(const std::string& name, const std::string& value, const std::string& defaultValue, const std::string& type) : - _name(name), _value(value), - _defaultValue(defaultValue), _type(type) {} - ~ConfigTreeItem() {} - - void setValue(const std::string& value) { _value = value; } - const std::string getName() const { return _name; } - const std::string getValue() const { return _value; } - const std::string getDefaultValue() const { return _defaultValue; } - const std::string getType() const { return _type; } - -private: - std::string _name; - std::string _value; - std::string _defaultValue; - std::string _type; -}; + class ConfigTreeItem; + typedef std::map<std::string, ConfigTreeItem> ItemMap; + typedef std::map<std::string, ItemMap*> SectionMap; + typedef std::list<std::string> TokenList; + + class ConfigTreeItemException { + public: + /** + * Constructor + * */ + ConfigTreeItemException() {} + + /** + * Destructor + * */ + ~ConfigTreeItemException() {} + }; + + class ConfigTree; + class ConfigTreeIterator + { + public: + /** + * Parsing method + * @return TokenList + */ + TokenList begin(); + + /** + * Parsing method + * @return TokenList + */ + const TokenList& end() const { return _endToken; } + + /** + * Parsing method + * @return TokenList + */ + TokenList next(); + + private: + friend class ConfigTree; + ConfigTreeIterator(ConfigTree *configTree) : _tree(configTree) {} + + ConfigTree* _tree; + TokenList _endToken; + SectionMap::iterator _iter; + ItemMap::iterator _iterItem; + }; + + class ConfigTree { + public: + ConfigTree(); + ~ConfigTree(); + + void createSection(const std::string& section); + void removeSection(const std::string& section); + /** + * Return an array of strings, listing the sections of the config file + * + * This will be mainly used to filter which sections are an + * "Account" definition. + * + * @return array Strings of the sections + */ + TokenList getSections(); + + void addConfigTreeItem(const std::string& section, const ConfigTreeItem item); + /** + * Set a configuration value. + * + * @param section Write to this [section] of the .ini file + * @param itemName The itemName= in the .ini file + * @param value The value to assign to that itemName + */ + bool setConfigTreeItem(const std::string& section, const std::string& itemName, const std::string& value); + + /** + * Get a value. + * + * This function does all the validity tests, so none are needed throughout + * the program. + * + * @param section The name of the [section] in the .ini file. + * @param itemName The name of the item= in the .ini file. + * @return The value of the corresponding item. The default value if the section exists + * but the item doesn't. + */ + std::string getConfigTreeItemValue(const std::string& section, const std::string& itemName); + int getConfigTreeItemIntValue(const std::string& section, const std::string& itemName); + + /** + * Flush data to .ini file + */ + bool saveConfigTree(const std::string& fileName); + + /** + * Load data (and fill ConfigTree) from disk + */ + int populateFromFile(const std::string& fileName); + + bool getConfigTreeItemToken(const std::string& section, const std::string& itemName, TokenList& arg); + + private: + ConfigTreeItem* getConfigTreeItem(const std::string& section, const std::string& itemName); + + /** + * List of sections. Each sections has an ItemList as child + */ + SectionMap _sections; + friend class ConfigTreeIterator; + + public: + ConfigTreeIterator createIterator() { + return ConfigTreeIterator(this); + } + }; + + class ConfigTreeItem { + public: + ConfigTreeItem() : _defaultValue(""), _type("string") {} + // defaultvalue = value + ConfigTreeItem(const std::string& name, const std::string& value, const std::string& type) : + _name(name), _value(value), + _defaultValue(value), _type(type) {} + ConfigTreeItem(const std::string& name, const std::string& value, const std::string& defaultValue, const std::string& type) : + _name(name), _value(value), + _defaultValue(defaultValue), _type(type) {} + ~ConfigTreeItem() {} + + void setValue(const std::string& value) { _value = value; } + const std::string getName() const { return _name; } + const std::string getValue() const { return _value; } + const std::string getDefaultValue() const { return _defaultValue; } + const std::string getType() const { return _type; } + + private: + std::string _name; + std::string _value; + std::string _defaultValue; + std::string _type; + }; } // end namespace ConfigTree -- GitLab