| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160 |
- #ifndef PROLOGPARSE_HH
- #define PROLOGPARSE_HH
- #include <gprolog.h>
- #include <string>
- #include <iostream>
- #include <tuple>
- #include <vector>
- #include <typeinfo>
- #include <cstddef>
- //template<class Value, class ...Values>
- class prologparse{
- private:
- std::vector<PlTerm> gEvents;
- //unsigned int cpt=0;
- //template<typename Value>
-
-
- // template<typename Value>
- // void unstack(Value element){
- // if(typeid(element)==typeid(int)){
- // variadic_types.push_back("int");
- // }else{
- // if(typeid(element)==typeid(const char*)){
- // variadic_types.push_back("string");
- // }
- // }
- // //std::cout<<element<<" "<<typeid(element).name()<<std::endl;
- // }
- void unstack(int element){
- gEvents.push_back(Mk_Integer(element));
- }
- void unstack(const char* element){
- gEvents.push_back(Mk_String(element));
- }
- void unstack(std::string element){
- gEvents.push_back(Mk_String(const_cast<char*>(element.c_str())));
- }
- void unstack(float element){
- gEvents.push_back(Mk_Float(element));
- }
- template<typename ...Values>
- void unstack(int element,Values... elements){
- gEvents.push_back(Mk_Integer(element));
- unstack(elements...);
- }
- template<typename ...Values>
- void unstack(const char* element,Values... elements){
- gEvents.push_back(Mk_String(element));
- unstack(elements...);
- }
- template<typename ...Values>
- void unstack(std::string element,Values... elements){
- gEvents.push_back(Mk_String(const_cast<char*>(element.c_str())));
- unstack(elements...);
- }
- template<typename ...Values>
- void unstack(float element,Values... elements){
- gEvents.push_back(Mk_Float(element));
- unstack(elements...);
- }
-
- public:
- /** \brief Void constructor
- *
- * add desc
- *
- */
- prologparse(){
- std::cout<<"lol"<<std::endl;
- //
- // int stt=Start_Prolog(1, new char*());
- // std::cout<<stt<<std::endl;
- //Try_Execute_Top_Level();
- }
- void resetPl(){
- Pl_Reset_Prolog ();
- }
- int startPl(){
- return Start_Prolog(1, new char*());
- }
- void stopPl(){Stop_Prolog();}
- // /** \brief Destructor
- // *
- // * add desc
- // *
- // */
- ~prologparse(){
- //Stop_Prolog();
- }
- // PlTerm to_gEvent(std::string type_, std::string location_, unsigned long begin_, unsigned long end_);
- //bool intersect(int au,)
- int rule(std::string name){
- Pl_Reset_Prolog ();
- PlTerm plt[1];
-
- int func;
- int gRes=-1;
- func = Find_Atom(const_cast<char*>(name.c_str()));
- Pl_Query_Begin(PL_FALSE);
- std::cout<<func<<std::endl;
- gRes = Pl_Query_Call(func, 1, plt);
- Pl_Query_End(PL_KEEP_FOR_PROLOG);
- if(gRes==1){
- std::cout<<"true"<<std::endl;
- }
- gEvents.clear();
- return gRes;
- //std::cout<<gRes << " "<<true<<std::endl;
- }
- template<typename Value,typename... Values>
- int rule(std::string name,Value val,Values... vals){
- Pl_Reset_Prolog ();
- unstack(val,vals...);
- std::tuple<Value,Values...> tupl(val,vals...);
- //gEvents.push_back(Mk_Variable());
- PlTerm* plt=&gEvents[0];
- std::cout<<gEvents.size()<<std::endl;
- int func;
- int result=-1;
- func = Find_Atom(const_cast<char*>(name.c_str()));
- std::cout<<func<<" "<<Rd_Float(plt[0])<<std::endl;
- //plt[0]=1;plt[1]=1;plt[2]=1;plt[3]=1;plt[4]=1;plt[5]=1;plt[6]=1;
-
- Pl_Query_Begin(PL_FALSE);
- result=Pl_Query_Call(func, gEvents.size(), plt);
- Pl_Query_End(PL_KEEP_FOR_PROLOG);
- if(result==1){
- std::cout<<"true"<<std::endl;
- }else{
- if(result==0){
- std::cout<<"false"<<std::endl;
- }
- }
- gEvents.clear();
- return result;
- }
- template<typename Value>
- void process_one_type(){
- std::cout<<typeid(Value).name()<<" ";
- }
-
- template <typename... Values>
- void unpack(){
- int _[]={0,(process_one_type<Values>(),0)...};
- (void)_;
- std::cout<<std::endl;
- }
-
- };
- #endif // PROLOGPARSE_HH
|