| OLD | NEW | 
| (Empty) |  | 
 |    1 #include <exception> | 
 |    2 #include <string> | 
 |    3  | 
 |    4 #include <emscripten.h> | 
 |    5  | 
 |    6 #include "Filter.h" | 
 |    7 #include "InvalidFilter.h" | 
 |    8 #include "ActiveFilter.h" | 
 |    9 #include "RegExpFilter.h" | 
 |   10  | 
 |   11 #pragma clang diagnostic push | 
 |   12 #pragma clang diagnostic ignored "-Wreturn-type-c-linkage" | 
 |   13  | 
 |   14 #define EXPOSE_FILTER_PROPERTY(class, type, getter, setter) \ | 
 |   15   type EMSCRIPTEN_KEEPALIVE class##_##getter(const FilterPtr& filter)\ | 
 |   16   {\ | 
 |   17     return std::dynamic_pointer_cast<class>(filter)->getter();\ | 
 |   18   }\ | 
 |   19   void EMSCRIPTEN_KEEPALIVE class##_##setter(\ | 
 |   20       const FilterPtr& filter, type value)\ | 
 |   21   {\ | 
 |   22     std::dynamic_pointer_cast<class>(filter)->setter(value);\ | 
 |   23   } | 
 |   24  | 
 |   25 extern "C" | 
 |   26 { | 
 |   27   const char* EMSCRIPTEN_KEEPALIVE GetException(const std::exception& e) | 
 |   28   { | 
 |   29     return e.what(); | 
 |   30   } | 
 |   31  | 
 |   32   size_t EMSCRIPTEN_KEEPALIVE GetSizeofString() | 
 |   33   { | 
 |   34     return sizeof(std::u16string); | 
 |   35   } | 
 |   36  | 
 |   37   void EMSCRIPTEN_KEEPALIVE InitString(std::u16string* str, char16_t* data, size
     _t len) | 
 |   38   { | 
 |   39     // String is already allocated on stack, we merely need to call constructor. | 
 |   40     new (str) std::u16string(data, len); | 
 |   41   } | 
 |   42  | 
 |   43   void EMSCRIPTEN_KEEPALIVE DestroyString(std::u16string* str) | 
 |   44   { | 
 |   45     // Stack memory will be freed automatically, we need to call destructor | 
 |   46     // explicitly however. | 
 |   47     using namespace std; | 
 |   48     str->~u16string(); | 
 |   49   } | 
 |   50  | 
 |   51   size_t EMSCRIPTEN_KEEPALIVE GetStringLength(const std::u16string& str) | 
 |   52   { | 
 |   53     return str.length(); | 
 |   54   } | 
 |   55  | 
 |   56   FilterPtr* EMSCRIPTEN_KEEPALIVE CreatePointer() | 
 |   57   { | 
 |   58     return new FilterPtr(); | 
 |   59   } | 
 |   60  | 
 |   61   void EMSCRIPTEN_KEEPALIVE DeletePointer(FilterPtr* ptr) | 
 |   62   { | 
 |   63     delete ptr; | 
 |   64   } | 
 |   65  | 
 |   66   const char16_t* EMSCRIPTEN_KEEPALIVE GetStringData(const std::u16string& str) | 
 |   67   { | 
 |   68     return str.c_str(); | 
 |   69   } | 
 |   70  | 
 |   71   std::u16string EMSCRIPTEN_KEEPALIVE Filter_GetText(const FilterPtr& filter) | 
 |   72   { | 
 |   73     return filter->GetText(); | 
 |   74   } | 
 |   75  | 
 |   76   Filter::Type EMSCRIPTEN_KEEPALIVE Filter_GetType(const FilterPtr& filter) | 
 |   77   { | 
 |   78     return filter->GetType(); | 
 |   79   } | 
 |   80  | 
 |   81   FilterPtr EMSCRIPTEN_KEEPALIVE Filter_FromText(const std::u16string& text) | 
 |   82   { | 
 |   83     return Filter::FromText(text); | 
 |   84   } | 
 |   85  | 
 |   86   const std::u16string EMSCRIPTEN_KEEPALIVE Filter_Normalize(const std::u16strin
     g& text) | 
 |   87   { | 
 |   88     return Filter::Normalize(text); | 
 |   89   } | 
 |   90  | 
 |   91   const std::u16string EMSCRIPTEN_KEEPALIVE InvalidFilter_GetReason(const Filter
     Ptr& filter) | 
 |   92   { | 
 |   93     return std::dynamic_pointer_cast<InvalidFilter>(filter)->GetReason(); | 
 |   94   } | 
 |   95  | 
 |   96   EXPOSE_FILTER_PROPERTY(ActiveFilter, bool, GetDisabled, SetDisabled); | 
 |   97   EXPOSE_FILTER_PROPERTY(ActiveFilter, unsigned int, GetHitCount, SetHitCount); | 
 |   98   EXPOSE_FILTER_PROPERTY(ActiveFilter, unsigned int, GetLastHit, SetLastHit); | 
 |   99  | 
 |  100   bool EMSCRIPTEN_KEEPALIVE RegExpFilter_Matches(const FilterPtr& filter, const 
     std::u16string& location) | 
 |  101   { | 
 |  102     return std::dynamic_pointer_cast<RegExpFilter>(filter)->Matches(location); | 
 |  103   } | 
 |  104 } | 
 |  105  | 
 |  106 #pragma clang diagnostic pop | 
| OLD | NEW |