| #pragma once |
| |
| #ifndef GEODE_PDXAUTOSERIALIZER_INPUTPARSER_H_ |
| #define GEODE_PDXAUTOSERIALIZER_INPUTPARSER_H_ |
| |
| /* |
| * Licensed to the Apache Software Foundation (ASF) under one or more |
| * contributor license agreements. See the NOTICE file distributed with |
| * this work for additional information regarding copyright ownership. |
| * The ASF licenses this file to You under the Apache License, Version 2.0 |
| * (the "License"); you may not use this file except in compliance with |
| * the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| |
| #include "base_types.hpp" |
| #include "CodeGenerator.hpp" |
| |
| namespace apache { |
| namespace geode { |
| namespace client { |
| namespace pdx_auto_serializer { |
| // Forward declaration. |
| class InputParser; |
| |
| /** |
| * This class describes the interface to be implemented by the |
| * front-end parsers to represent each class in the resource. |
| */ |
| class ClassInfo { |
| public: |
| /** |
| * Destruct the class. |
| */ |
| virtual ~ClassInfo() {} |
| |
| /** |
| * Initialize with a handle to <code>InputParser</code>. |
| * |
| * @param parser Pointer to the <code>InputParser</code> object. |
| */ |
| virtual void init(InputParser* parser); |
| |
| /** |
| * Get the name of the class. |
| * |
| * @return The name of this class. |
| */ |
| virtual std::string getName() const = 0; |
| |
| /** |
| * Get the set of references required for the class. |
| * |
| * @param references The vector of references. |
| */ |
| virtual void getReferences(ReferenceVector& references) const = 0; |
| |
| /** |
| * Get the class information (with the namespace information) for this |
| * class. |
| * |
| * @param classType The <code>TypeInfo</code> for the class. |
| */ |
| virtual void getTypeInfo(TypeInfo& classType) const = 0; |
| |
| /** |
| * Get the list of members of this class to be serialized/deserialized. |
| * |
| * @param members The vector of variables that contains the list |
| * of variables that need to be serialized/deserialized. |
| */ |
| virtual void getMembers(VariableVector& members) const = 0; |
| |
| virtual std::string getMethodPrefix() const = 0; |
| |
| protected: |
| /** |
| * The <code>InputParser</code> object for which classes are being |
| * extracted. |
| */ |
| InputParser* m_parser; |
| }; |
| |
| /** Shorthand for a vector of <code>ClassInfo</code> objects. */ |
| typedef std::vector<const ClassInfo*> ASClassVector; |
| |
| /** |
| * Shorthand for a map of class names to corresponding |
| * <code>ClassInfo</code> objects. |
| */ |
| typedef std::map<std::string, const ClassInfo*> ASClassMap; |
| |
| /** |
| * Shorthand for a map of class names to corresponding |
| * <code>ClassInfo</code> objects with a flag for selection. |
| */ |
| typedef std::map<std::string, std::pair<ClassInfo*, bool> > ASClassFlagMap; |
| |
| /** |
| * This class describes the interface to be implemented by front-end |
| * parsers. |
| */ |
| class InputParser { |
| public: |
| /** |
| * Destruct the parser. |
| */ |
| virtual ~InputParser() {} |
| |
| /** |
| * Get a list of options and usage for the parser. |
| * |
| * @param options Output parameter for options along-with their usage. |
| */ |
| virtual void getOptions(OptionMap& options) const = 0; |
| |
| /** |
| * Initialize the parser with the given properties. |
| * |
| * @param properties The set of properties for the resource as given |
| * on the command-line. The function should modify |
| * this map so as to remove the properties used by |
| * the implementation. This should also match the |
| * usage as provided by |
| * <code>InputParser::getOptions</code> method. |
| */ |
| virtual void init(PropertyMap& properties) = 0; |
| |
| /** |
| * Select some or all classes in the given resources. |
| * |
| * @param resources The resources to parse. |
| * @param classNames The names of the classes which constitute the |
| * initial selection as specified by the user. |
| * If this is empty then all the classes are marked |
| * as selected. |
| */ |
| virtual void selectClasses(const StringVector& resources, |
| const StringVector& classNames) = 0; |
| |
| /** |
| * Add the given class to the current selection of classes. |
| * |
| * @param className The name of the new class to be added. |
| * @return True if the given class name exists in the global list. |
| */ |
| virtual bool select(const std::string& className); |
| |
| /** |
| * Search the given class name in the global list of classes. |
| * |
| * @param className The name of the class to search. |
| * @return True if the given class name exists in the global list. |
| */ |
| virtual bool contains(const std::string& className) const; |
| |
| /** |
| * Get the selected list of classes. |
| * |
| * @param classes Output parameter containing the vector of |
| * selected classes. |
| */ |
| virtual void getSelectedClasses(ASClassVector& classes) const; |
| |
| protected: |
| /** |
| * Stores the set of all the classes with the classes selected so far |
| * as marked selected. |
| */ |
| ASClassFlagMap m_classes; |
| }; |
| } // namespace pdx_auto_serializer |
| } // namespace client |
| } // namespace geode |
| } // namespace apache |
| |
| #endif // GEODE_PDXAUTOSERIALIZER_INPUTPARSER_H_ |