16310a8261c922533a692fb3e74ece2da98d4bafaColin Cross/* 26310a8261c922533a692fb3e74ece2da98d4bafaColin Cross * Copyright (C) 2010 The Android Open Source Project 36310a8261c922533a692fb3e74ece2da98d4bafaColin Cross * 46310a8261c922533a692fb3e74ece2da98d4bafaColin Cross * Licensed under the Apache License, Version 2.0 (the "License"); 56310a8261c922533a692fb3e74ece2da98d4bafaColin Cross * you may not use this file except in compliance with the License. 66310a8261c922533a692fb3e74ece2da98d4bafaColin Cross * You may obtain a copy of the License at 76310a8261c922533a692fb3e74ece2da98d4bafaColin Cross * 86310a8261c922533a692fb3e74ece2da98d4bafaColin Cross * http://www.apache.org/licenses/LICENSE-2.0 96310a8261c922533a692fb3e74ece2da98d4bafaColin Cross * 106310a8261c922533a692fb3e74ece2da98d4bafaColin Cross * Unless required by applicable law or agreed to in writing, software 116310a8261c922533a692fb3e74ece2da98d4bafaColin Cross * distributed under the License is distributed on an "AS IS" BASIS, 126310a8261c922533a692fb3e74ece2da98d4bafaColin Cross * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 136310a8261c922533a692fb3e74ece2da98d4bafaColin Cross * See the License for the specific language governing permissions and 146310a8261c922533a692fb3e74ece2da98d4bafaColin Cross * limitations under the License. 156310a8261c922533a692fb3e74ece2da98d4bafaColin Cross */ 166310a8261c922533a692fb3e74ece2da98d4bafaColin Cross 176310a8261c922533a692fb3e74ece2da98d4bafaColin Cross#ifndef _INIT_INIT_PARSER_H_ 186310a8261c922533a692fb3e74ece2da98d4bafaColin Cross#define _INIT_INIT_PARSER_H_ 196310a8261c922533a692fb3e74ece2da98d4bafaColin Cross 20b7349902a945903f9e36a569051f5131beb0bc24Tom Cherry#include <map> 2100ede7d2626f9343d330dc6f5286bba3e99e41d0Yabin Cui#include <string> 22bac3299720623f4226bca103b26260052732ad30Tom Cherry#include <vector> 2300ede7d2626f9343d330dc6f5286bba3e99e41d0Yabin Cui 24b7349902a945903f9e36a569051f5131beb0bc24Tom Cherryclass SectionParser { 25b7349902a945903f9e36a569051f5131beb0bc24Tom Cherrypublic: 26b7349902a945903f9e36a569051f5131beb0bc24Tom Cherry virtual ~SectionParser() { 27b7349902a945903f9e36a569051f5131beb0bc24Tom Cherry } 28b7349902a945903f9e36a569051f5131beb0bc24Tom Cherry virtual bool ParseSection(const std::vector<std::string>& args, 29b7349902a945903f9e36a569051f5131beb0bc24Tom Cherry std::string* err) = 0; 30b7349902a945903f9e36a569051f5131beb0bc24Tom Cherry virtual bool ParseLineSection(const std::vector<std::string>& args, 31b7349902a945903f9e36a569051f5131beb0bc24Tom Cherry const std::string& filename, int line, 32b7349902a945903f9e36a569051f5131beb0bc24Tom Cherry std::string* err) const = 0; 33b7349902a945903f9e36a569051f5131beb0bc24Tom Cherry virtual void EndSection() = 0; 34b7349902a945903f9e36a569051f5131beb0bc24Tom Cherry virtual void EndFile(const std::string& filename) = 0; 35b7349902a945903f9e36a569051f5131beb0bc24Tom Cherry}; 366310a8261c922533a692fb3e74ece2da98d4bafaColin Cross 37b7349902a945903f9e36a569051f5131beb0bc24Tom Cherryclass Parser { 38b7349902a945903f9e36a569051f5131beb0bc24Tom Cherrypublic: 39b7349902a945903f9e36a569051f5131beb0bc24Tom Cherry static Parser& GetInstance(); 40b7349902a945903f9e36a569051f5131beb0bc24Tom Cherry void DumpState() const; 41b7349902a945903f9e36a569051f5131beb0bc24Tom Cherry bool ParseConfig(const std::string& path); 42b7349902a945903f9e36a569051f5131beb0bc24Tom Cherry void AddSectionParser(const std::string& name, 43b7349902a945903f9e36a569051f5131beb0bc24Tom Cherry std::unique_ptr<SectionParser> parser); 446310a8261c922533a692fb3e74ece2da98d4bafaColin Cross 45b7349902a945903f9e36a569051f5131beb0bc24Tom Cherryprivate: 46b7349902a945903f9e36a569051f5131beb0bc24Tom Cherry Parser(); 47b7349902a945903f9e36a569051f5131beb0bc24Tom Cherry 48b7349902a945903f9e36a569051f5131beb0bc24Tom Cherry void ParseData(const std::string& filename, const std::string& data); 49b7349902a945903f9e36a569051f5131beb0bc24Tom Cherry bool ParseConfigFile(const std::string& path); 50b7349902a945903f9e36a569051f5131beb0bc24Tom Cherry bool ParseConfigDir(const std::string& path); 51b7349902a945903f9e36a569051f5131beb0bc24Tom Cherry 52b7349902a945903f9e36a569051f5131beb0bc24Tom Cherry std::map<std::string, std::unique_ptr<SectionParser>> section_parsers_; 53b7349902a945903f9e36a569051f5131beb0bc24Tom Cherry}; 548d82ea05cb0945ba6cb8bf321b9ffbd0b6932745Elliott Hughes 556310a8261c922533a692fb3e74ece2da98d4bafaColin Cross#endif 56