tld.cpp 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. #include "tld.h"
  2. #include <library/cpp/digest/lower_case/hash_ops.h>
  3. #include <util/generic/hash_set.h>
  4. #include <util/generic/singleton.h>
  5. namespace NTld {
  6. namespace {
  7. #include <library/cpp/tld/tld.inc>
  8. using TCiHash = THashSet<TStringBuf, TCIOps, TCIOps>;
  9. struct TTLDHash: public TCiHash {
  10. TTLDHash() {
  11. for (auto tld = GetTlds(); *tld; ++tld) {
  12. insert(*tld);
  13. }
  14. }
  15. };
  16. struct TVeryGoodTld: public TCiHash {
  17. TVeryGoodTld() {
  18. auto domains = {
  19. "am", "az", "biz", "by", "com", "cz", "de", "ec", "fr", "ge", "gov",
  20. "gr", "il", "info", "kg", "kz", "mobi", "net", "nu", "org", "lt", "lv",
  21. "md", "ru", "su", "tr", "ua", "uk", "uz", "ws", "xn--p1ai", "рф"};
  22. for (auto d : domains) {
  23. insert(d);
  24. }
  25. }
  26. };
  27. }
  28. const char* const* GetTlds() {
  29. return TopLevelDomains;
  30. }
  31. bool IsTld(const TStringBuf& s) {
  32. return Default<TTLDHash>().contains(s);
  33. }
  34. bool IsVeryGoodTld(const TStringBuf& s) {
  35. return Default<TVeryGoodTld>().contains(s);
  36. }
  37. }