X-Git-Url: http://git.hcoop.net/clinton/Smoothieware.git/blobdiff_plain/4a43ef913ca66b663bf02983e1acc9eed58ed5d6..18dbd06e8319bf14015ba8aa8c60bd05914673ae:/src/libs/ConfigSource.h diff --git a/src/libs/ConfigSource.h b/src/libs/ConfigSource.h dissimilarity index 70% index d36d2717..eb716963 100644 --- a/src/libs/ConfigSource.h +++ b/src/libs/ConfigSource.h @@ -1,94 +1,38 @@ -/* - This file is part of Smoothie (http://smoothieware.org/). The motion control part is heavily based on Grbl (https://github.com/simen/grbl). - Smoothie is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. - Smoothie is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. - You should have received a copy of the GNU General Public License along with Smoothie. If not, see . -*/ - -#ifndef CONFIGSOURCE_H -#define CONFIGSOURCE_H - -using namespace std; -#include -#include -#include "ConfigValue.h" -#include "ConfigCache.h" - -class ConfigValue; - -class ConfigSource { - public: - ConfigSource(){} - - // Read each value, and append it as a ConfigValue to the config_cache we were passed - virtual void transfer_values_to_cache( ConfigCache* ) = 0; - virtual bool is_named( uint16_t check_sum ) = 0; - virtual void write( string setting, string value ) = 0; - virtual string read( uint16_t check_sums[3] ) = 0; - - uint16_t name_checksum; - protected: - virtual string process_char_from_ascii_config(int c, ConfigCache* cache) { - static string buffer; - if (c == '\n' || c == EOF) - { - // We have a new line - if( buffer[0] == '#' ){ buffer.clear(); return ""; } // Ignore comments - if( buffer.length() < 3 ){ buffer.clear(); return ""; } //Ignore empty lines - size_t begin_key = buffer.find_first_not_of(" "); - size_t begin_value = buffer.find_first_not_of(" ", buffer.find_first_of(" ", begin_key)); - - uint16_t check_sums[3]; - get_checksums(check_sums, buffer.substr(begin_key, buffer.find_first_of(" ", begin_key) - begin_key).append(" ")); - - ConfigValue* result = new ConfigValue; - - result->found = true; - result->check_sums[0] = check_sums[0]; - result->check_sums[1] = check_sums[1]; - result->check_sums[2] = check_sums[2]; - - result->value = buffer.substr(begin_value, buffer.find_first_of("\r\n# ", begin_value+1)-begin_value); - // Append the newly found value to the cache we were passed - cache->replace_or_push_back(result); - - buffer.clear(); - - return result->value; - } - else - buffer += c; - - return ""; - }; - virtual string process_char_from_ascii_config(int c, uint16_t line_checksums[3]) { - static string buffer; - string value; - if (c == '\n' || c == EOF) - { - // We have a new line - if( buffer[0] == '#' ){ buffer.clear(); return ""; } // Ignore comments - if( buffer.length() < 3 ){ buffer.clear(); return ""; } //Ignore empty lines - size_t begin_key = buffer.find_first_not_of(" "); - size_t begin_value = buffer.find_first_not_of(" ", buffer.find_first_of(" ", begin_key)); - - uint16_t check_sums[3]; - get_checksums(check_sums, buffer.substr(begin_key, buffer.find_first_of(" ", begin_key) - begin_key).append(" ")); - - if(check_sums[0] == line_checksums[0] && check_sums[1] == line_checksums[1] && check_sums[2] == line_checksums[2] ){ - value = buffer.substr(begin_value, buffer.find_first_of("\r\n# ", begin_value+1)-begin_value); - buffer.clear(); - return value; - } - - buffer.clear(); - } - else - buffer += c; - return value; - }; -}; - - - -#endif +/* + This file is part of Smoothie (http://smoothieware.org/). The motion control part is heavily based on Grbl (https://github.com/simen/grbl). + Smoothie is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. + Smoothie is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. + You should have received a copy of the GNU General Public License along with Smoothie. If not, see . +*/ + +#ifndef CONFIGSOURCE_H +#define CONFIGSOURCE_H + +#include + +class ConfigValue; +class ConfigCache; + +class ConfigSource { + public: + ConfigSource(){} + virtual ~ConfigSource(){} + + // Read each value, and append it as a ConfigValue to the config_cache we were passed + virtual void transfer_values_to_cache( ConfigCache* ) = 0; + virtual bool is_named( uint16_t check_sum ) = 0; + virtual bool write( std::string setting, std::string value ) = 0; + virtual std::string read( uint16_t check_sums[3] ) = 0; + + protected: + virtual ConfigValue* process_line_from_ascii_config(const std::string& line, ConfigCache* cache); + virtual std::string process_line_from_ascii_config(const std::string& line, uint16_t line_checksums[3]); + uint16_t name_checksum; + + private: + ConfigValue* process_line(const std::string &buffer); +}; + + + +#endif