Updated all the contrib modules to their latest versions.
[yaffs-website] / web / modules / contrib / memcache / src / Driver / MemcachedDriver.php
diff --git a/web/modules/contrib/memcache/src/Driver/MemcachedDriver.php b/web/modules/contrib/memcache/src/Driver/MemcachedDriver.php
new file mode 100755 (executable)
index 0000000..0e8e67d
--- /dev/null
@@ -0,0 +1,94 @@
+<?php
+
+namespace Drupal\memcache\Driver;
+
+/**
+ * Class MemcachedDriver.
+ */
+class MemcachedDriver extends DriverBase {
+
+  /**
+   * {@inheritdoc}
+   */
+  public function set($key, $value, $exp = 0, $flag = FALSE) {
+    $collect_stats = $this->statsInit();
+
+    $full_key = $this->key($key);
+    $result = $this->memcache->set($full_key, $value, $exp);
+
+    if ($collect_stats) {
+      $this->statsWrite('set', 'cache', [$full_key => (int) $result]);
+    }
+
+    return $result;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function add($key, $value, $expire = 0) {
+    $collect_stats = $this->statsInit();
+
+    $full_key = $this->key($key);
+    $result = $this->memcache->add($full_key, $value, $expire);
+
+    if ($collect_stats) {
+      $this->statsWrite('add', 'cache', [$full_key => (int) $result]);
+    }
+
+    return $result;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getMulti(array $keys) {
+    $collect_stats = $this->statsInit();
+    $multi_stats   = [];
+
+    $full_keys = [];
+
+    foreach ($keys as $key => $cid) {
+      $full_key = $this->key($cid);
+      $full_keys[$cid] = $full_key;
+
+      if ($collect_stats) {
+        $multi_stats[$full_key] = FALSE;
+      }
+    }
+
+    if (PHP_MAJOR_VERSION === 7) {
+      $results = $this->memcache->getMulti($full_keys, \Memcached::GET_PRESERVE_ORDER);
+    }
+    else {
+      $cas_tokens = NULL;
+      $results = $this->memcache->getMulti($full_keys, $cas_tokens, \Memcached::GET_PRESERVE_ORDER);
+    }
+
+    // If $results is FALSE, convert it to an empty array.
+    if (!$results) {
+      $results = [];
+    }
+
+    if ($collect_stats) {
+      foreach ($multi_stats as $key => $value) {
+        $multi_stats[$key] = isset($results[$key]) ? TRUE : FALSE;
+      }
+    }
+
+    // Convert the full keys back to the cid.
+    $cid_results = [];
+    $cid_lookup = array_flip($full_keys);
+
+    foreach (array_filter($results) as $key => $value) {
+      $cid_results[$cid_lookup[$key]] = $value;
+    }
+
+    if ($collect_stats) {
+      $this->statsWrite('getMulti', 'cache', $multi_stats);
+    }
+
+    return $cid_results;
+  }
+
+}