<?php

/**
 * W3 Total Cache Object Cache
 */
if (!defined('W3TC_DIR')) {
    define('W3TC_DIR', WP_CONTENT_DIR . '/plugins/w3-total-cache');
}

if (!@is_dir(W3TC_DIR) || !file_exists(W3TC_DIR . '/inc/define.php')) {
    if (!defined('WP_ADMIN')) { // lets don't show error on front end
        require_once (ABSPATH . WPINC . '/cache.php');
    } else {
        @header('HTTP/1.1 503 Service Unavailable');
        die(sprintf('<strong>W3 Total Cache Error:</strong> some files appear to be missing or out of place. Please re-install plugin or remove <strong>%s</strong>.', __FILE__));
    }
} else {
    require_once W3TC_DIR . '/inc/define.php';
    require_once W3TC_DIR . '/lib/W3/ObjectCache.php';
    
    /**
     * Init cache
     * 
     * @return void
     */
    function wp_cache_init()
    {
        $GLOBALS['wp_object_cache'] = & W3_ObjectCache::instance();
    }
    
    /**
     * Reset cache
     * 
     * @return boolean
     */
    function wp_cache_reset()
    {
        return true;
    }
    
    /**
     * Close cache
     * 
     * @return boolean
     */
    function wp_cache_close()
    {
        return true;
    }
    
    /**
     * Get from cache
     * 
     * @param string $id
     * @param string $group
     * @return mixed
     */
    function wp_cache_get($id, $group = 'default')
    {
        global $wp_object_cache;
        
        return $wp_object_cache->get($id, $group);
    }
    
    /**
     * Set cache
     * 
     * @param string $id
     * @param mixed $data
     * @param string $group
     * @param integer $expire
     * @return boolean
     */
    function wp_cache_set($id, $data, $group = 'default', $expire = 0)
    {
        global $wp_object_cache;
        
        return $wp_object_cache->set($id, $data, $group, $expire);
    }
    
    /**
     * Delete from cache
     * 
     * @param string $id
     * @param string $group
     * @return boolean
     */
    function wp_cache_delete($id, $group = 'default')
    {
        global $wp_object_cache;
        
        return $wp_object_cache->delete($id, $group);
    }
    
    /**
     * Add data to cache
     * 
     * @param string $id
     * @param mixed $data
     * @param string $group
     * @param integer $expire
     * @return boolean
     */
    function wp_cache_add($id, $data, $group = 'default', $expire = 0)
    {
        global $wp_object_cache;
        
        return $wp_object_cache->add($id, $data, $group, $expire);
    }
    
    /**
     * Replace data in cache
     * 
     * @param string $id
     * @param mixed $data
     * @param string $group
     * @param integer $expire
     * @return boolean
     */
    function wp_cache_replace($id, $data, $group = 'default', $expire = 0)
    {
        global $wp_object_cache;
        
        return $wp_object_cache->replace($id, $data, $group, $expire);
    }
    
    /**
     * Flush cache
     * 
     * @return boolean
     */
    function wp_cache_flush()
    {
        global $wp_object_cache;
        
        return $wp_object_cache->flush();
    }
    
    /**
     * Add global groups
     * 
     * @param array $groups
     * @return void
     */
    function wp_cache_add_global_groups($groups)
    {
        global $wp_object_cache;
        
        $wp_object_cache->add_global_groups($groups);
    }
    
    /**
     * add non-persistent groups
     * 
     * @param array $groups
     * @return void
     */
    function wp_cache_add_non_persistent_groups($groups)
    {
        global $wp_object_cache;
        
        $wp_object_cache->add_nonpersistent_groups($groups);
    }
}
