file ScannerBit/plugin_details.hpp

[No description available] More…


TODO: see if we can use this one:


container info for a specific plugin

Detailed Description

Class to hold details of scanner plugins and define simple comparison operations on them.

Authors (add name and date if you modify):

Source code

//  GAMBIT: Global and Modular BSM Inference Tool
//  *********************************************
///  \file
///  Class to hold details of scanner plugins and
///  define simple comparison operations on them. 
///  *********************************************
///  Authors (add name and date if you modify):
///  \author Gregory Martinez
///          (
///  \date 2013 August
///  \date 2014 Feb
///  \author Pat Scott
///          (   
///  \date 2014 Dec
///  *********************************************


#include <vector>
#include "yaml-cpp/yaml.h"

namespace Gambit
    namespace Scanner
        namespace Plugins
            ///container info for a specific plugin
            struct Plugin_Details
                ///version string: maj.min.patch-release
                std::string version;
                ///major version number
                int major_version;
                ///minor version number
                int minor_version;
                ///patch version number
                int patch_version;
                ///status, not set right now
                std::string status;
                ///reason is excluded
                std::vector<std::string> reason;
                ///release version
                std::string release_version;
                ///full path to library containing plugin
                std::string path;
                ///plugin name
                std::string plugin;
                ///plugin type
                std::string type;
                ///full string that ScannerBit sees
                std::string full_string;
                ///inifile entries requested my plugin in the "reqd_inifile_entries(...)" function
                std::vector<std::string> reqd_inifile_entries;
                ///libraries that were not linked but requested by the "reqd_libraries(...)" function
                std::vector<std::string> reqd_not_linked_libs;
                ///libraries specified in the "locations.yaml" file but not found
                std::vector<std::string> ini_libs_not_found;
                ///list of all libraries that are linked:  {lib_name: path_to_lib}
                std::multimap<std::string, std::string> linked_libs;
                ///requested include files that were not found
                std::vector<std::string> reqd_incs_not_found;
                ///paths specified in the "locations.yaml" file but where not found
                std::vector<std::string> ini_incs_not_found;
                ///list of all files that were found:  {file_name: include_path_to_file}
                std::multimap<std::string, std::string> found_incs;
                ///flag list
                mutable YAML::Node flags;
                std::multimap<std::string, std::string> linked_libraries() const {return linked_libs;}
                Plugin_Details(const std::string &str);
                void get_status(const YAML::Node &, const YAML::Node &, const YAML::Node &);

                static std::string get_description(const std::vector<const Plugin_Details *> &plugins);
                std::string printMin() const;
                std::string print() const;
                std::string printFull() const;
                static std::string printMultiPlugins(const std::vector<const Plugin_Details *> &);
            inline bool operator == (const Plugin_Details &plug1, const Plugin_Details &plug2)
                if ((plug1.major_version != plug2.major_version) ||
                    (plug1.major_version != plug2.major_version) ||
                    (plug1.minor_version != plug2.minor_version) ||
                    (plug1.release_version == "" && plug2.release_version != "") ||
                    (plug1.release_version != "" && plug2.release_version == ""))
                    return false;
                return true;
            class Plugin_Details_Ref
                mutable const Plugin_Details *details;
                Plugin_Details_Ref() {}
                Plugin_Details_Ref(const Plugin_Details &details) : details(&details) {}
                Plugin_Details_Ref(const Plugin_Details_Ref &details) : details(details.details) {}
                //const Plugin_Details_Ref &operator = (const Plugin_Details &details_in) const
                //    details = &details_in;
                //    return *this;
                const Plugin_Details_Ref &operator = (const Plugin_Details_Ref &details_in) const
                    details = details_in.details;
                    return *this;
                //Plugin_Details_Ref &operator = (Plugin_Details &details_in)
                //    details = &details_in;
                //    return *this;
                Plugin_Details_Ref &operator = (Plugin_Details_Ref &details_in)
                    details = details_in.details;
                    return *this;
                operator Plugin_Details &(){return *(Plugin_Details *)details;}
                operator const Plugin_Details &() const {return *details;}
            ///compares the user defined plugin version to the actual plugin version.
            bool Plugin_Version_Supersedes(const Plugin_Details &plug1, const Plugin_Details &plug2);


Updated on 2023-06-26 at 21:36:53 +0000