uw              Sat Mar  3 11:14:36 2001 EDT

  Modified files:              
    /php4/pear/Cache    Container.php 
  Log:
  PR:
    What does PR mean - Public Relations? Anyway: new cache structure/features
      - allowed to group cache datasets in a group
      - allowed to add userdata [CHAR(255)] to a dataset in the cache
   
    More explanations will follow on the PEAR list.
      
  Submitted by:  
    Ulf Wendel <[EMAIL PROTECTED]>
  
  Reviewed by: 
    myself ;-) 
    works on my development system and my homepage 
  
  
  
Index: php4/pear/Cache/Container.php
diff -u php4/pear/Cache/Container.php:1.3 php4/pear/Cache/Container.php:1.4
--- php4/pear/Cache/Container.php:1.3   Fri Mar  2 06:30:03 2001
+++ php4/pear/Cache/Container.php       Sat Mar  3 11:14:36 2001
@@ -16,7 +16,7 @@
 // |          Sebastian Bergmann <[EMAIL PROTECTED]>               |
 // +----------------------------------------------------------------------+
 //
-// $Id: Container.php,v 1.3 2001/03/02 14:30:03 uw Exp $
+// $Id: Container.php,v 1.4 2001/03/03 19:14:36 uw Exp $
 
 /**
 * Common base class of all cache storage container.
@@ -36,7 +36,7 @@
 * not recommended!
 * 
 * @author   Ulf Wendel <[EMAIL PROTECTED]>
-* @version  $Id: Container.php,v 1.3 2001/03/02 14:30:03 uw Exp $
+* @version  $Id: Container.php,v 1.4 2001/03/03 19:14:36 uw Exp $
 * @package  Cache
 * @access   public
 * @abstract
@@ -59,6 +59,15 @@
     */
     var $id = "";
     
+    
+    /**
+    * Cache group of a preloaded dataset
+    *
+    * @var  string
+    */
+    var $group = "";
+    
+    
     /**
     * Expiration timestamp of a preloaded dataset.
     * 
@@ -66,66 +75,108 @@
     */
     var $expires = 0;
     
+    
     /**
     * Value of a preloaded dataset.
     * 
     * @var  string
     */
-    var $data = "";
+    var $cachedata = "";
+    
     
     /**
+    * Preloaded userdata field.
+    * 
+    * @var  string
+    */
+    var $userdata = "";
+    
+    
+    /**
     * Flag indicating that the dataset requested for preloading is unknown.
     *  
     * @var  boolean
     */
     var $unknown = true;
     
+    
     /**
     * Encoding mode for cache data: base64 or addslashes() (slash).
     *
     * @var  string  base64 or slash
     */
     var $encoding_mode = "base64";
+    
         
     /**
     * Loads a dataset from the cache.
     * 
     * @param    string  dataset ID
+    * @param    string  cache group
     * @return   mixed   dataset value or NULL on failure
     * @access   public
     */
-    function load($id) {
+    function load($id, $group) {
 
         if ($this->preload) {
         
-            if ($this->id != $id)
-                $this->preload($id);
+            if ($this->id != $id || $this->group != $group)
+                $this->preload($id, $group);
 
-            return $this->data;
+            return $this->cachedata;
                             
         } else {
         
-            list( , $data) = $this->fetch($id);
+            list( , $data, ) = $this->fetch($id, $group);
             return $data;
             
         }
 
     } // end func load
     
+    
+    /**
+    * Returns the userdata field of a cached data set.
+    *
+    * @param    string  dataset ID
+    * @param    string  cache group
+    * @return   string  userdata
+    * @access   public
+    */
+    function getUserdata($id, $group) {
+        
+        if ($this->preload) {
+        
+            if ($this->id != $id || $this->group != $group)
+                $this->preload($id, $group);
+                
+            return $this->userdata;
+                        
+        } else {
+        
+            list( , , $userdata) = $this->fetch($id, $group);
+            return $userdata;
+                    
+        }
+            
+    } // end func getUserdata
+    
+    
     /**
     * Checks if a dataset is expired.
     * 
     * @param    string  dataset ID
+    * @param    string  cache group
     * @param    integer maximum age timestamp
     * @return   boolean 
     * @access   public
     */
-    function isExpired($id, $max_age = 0) {
+    function isExpired($id, $group, $max_age) {
 
         if ($this->preload) {
             
-          if ($this->id != $id)
-            $this->preload($id);
+          if ($this->id != $id || $this->group != $group)
+            $this->preload($id, $group);
           
           if ($this->unknown)
             return false;
@@ -133,11 +184,11 @@
         } else {
         
             // check if at all it is cached
-            if (!$this->isCached($id))
+            if (!$this->isCached($id, $group))
                 return false;
                 
             // I'm lazy...
-            list($this->expires, ) = $this->fetch($id);
+            list($this->expires, , ) = $this->fetch($id, $group);
         }
     
         // endless
@@ -147,7 +198,7 @@
         // you feel fine, Ulf?
         if ($expired  = ($this->expires <= time() || ($max_age && ($this->expires <= 
$max_age))) ) {
            
-           $this->delete($id);
+           $this->delete($id, $group);
            $this->flushPreload();
            
         }
@@ -155,24 +206,26 @@
         return $expired;
     } // end func isExpired
     
+    
     /**
     * Checks if a dataset is cached.
     *
     * @param    string  dataset ID
+    * @param    string  cache group
     * @return   boolean
     */
-    function isCached($id) {
+    function isCached($id, $group) {
     
         if ($this->preload) {
             
-            if ($this->id != $id)
-                $this->preload($id);
+            if ($this->id != $id || $this->group != $group)
+                $this->preload($id, $group);
 
             return !($this->unknown);
             
         } else {
             
-            return $this->idExists($id);
+            return $this->idExists($id, $group);
             
         }
         
@@ -186,12 +239,13 @@
     * Fetches a dataset from the storage medium.
     *
     * @param    string  dataset ID
-    * @return   array   format: [expire date, cached data]
+    * @param    string  cache group
+    * @return   array   format: [expire date, cached data, user data]
     * @throws   CacheError
     * @abstract
     */
-    function fetch($id) {
-        return array(NULL, NULL);
+    function fetch($id, $group) {
+        return array(NULL, NULL, NULL);
     } // end func fetch
     
     /**
@@ -200,55 +254,65 @@
     * @param    string  dataset ID
     * @param    mixed   data to store
     * @param    mixed   userdefined expire date
+    * @param    string  cache group
+    * @param    string  additional userdefined data
     * @return   boolean
     * @throws   CacheError
     * @access   public
     * @abstract
     */
-    function save($id, $data, $expire = 0) {
-        $this->flushPreload($id);
+    function save($id, $data, $expire, $group, $userdata) {
+    
+        // QUESTION: Should we update the preload buffer instead?
+        // Don't think so as the sequence save()/load() is unlikely.
+        $this->flushPreload($id, $group);
+        
         return NULL;
     } // end func save
     
-    
     /**
     * Deletes a dataset.
     * 
     * @param    string  dataset ID
+    * @param    string  cache group
     * @return   boolean  
     * @access   public
     * @abstract
     */     
-    function delete($id) {
-        $this->flushPreload($id);
+    function delete($id, $group) {
+        $this->flushPreload($id, $group);
         return NULL;
     } // end func delete
     
+    
     /**
-    * Flushes the cache - removes all caches datasets from the cache
+    * Flushes the cache - removes all caches datasets from the cache.
     * 
-    * @return   integer Number of removed datasets, -1 on failure
-    * @throws   CacheError
+    * @param    string      If a cache group is given only the group will be flushed
+    * @return   integer     Number of removed datasets, -1 on failure
     * @access   public
     * @abstract
     */
-    function flush() {
+    function flush($group) {
         $this->flushPreload();
         return NULL;
     } // end func flush
     
+    
     /**
-    * Checks if a dataset exists
+    * Checks if a dataset exists.
     * 
     * @param    string  dataset ID
+    * @param    string  cache group
     * @return   boolean 
     * @access   public
     * @abstract
     */
-    function idExists($id) {
+    function idExists($id, $group) {
         return NULL;
     } // end func idExists
     
+    
     /**
     * Starts the garbage collection.
     * 
@@ -259,28 +323,27 @@
         $this->flushPreload();
     } // end func garbageCollection
 
+    
     /**
     * Does a speculative preload of a dataset
     *
     * @param    string  dataset ID
+    * @param    string  cache group
     * @return   boolean
     */ 
-    function preload($id) {
+    function preload($id, $group) {
         
         // whatever happens, remember the preloaded ID
-        $this->id = $id;        
+        $this->id = $id;
+        $this->group = $group;        
         
-        list($this->expires, $this->data) = $this->fetch($id);
+        list($this->expires, $this->cachedata, $this->userdata) = $this->fetch($id, 
+$group);
         
-        if (NULL === $this->data) {
-            
+        if (NULL === $this->expires) {
+
             // Uuups, unknown ID
+            $this->flushPreload();
             
-            // clear the internal preload values
-            $this->data = "";
-            $this->expires = -1;
-            $this->unknown = true;
-            
             return false;
         }
         
@@ -289,6 +352,7 @@
         return true;
     } // end func preload
     
+    
     /**
     * Flushes the internal preload buffer.
     *
@@ -296,20 +360,27 @@
     * to preevent differences between the preloaded values and 
     * the real cache contents.
     *
+    * @param    string  dataset ID, if left out the preloaded values will be flushed. 
+    *                   If given the preloaded values will only be flushed if they are
+    *                   equal to the given id and group
+    * @param    string  cache group
     * @see  preload()
     */
-    function flushPreload($id = "") {
+    function flushPreload($id = "", $group = "default") {
 
-        if (!$id || $this->id == $id) {
+        if (!$id || ($this->id == $id && $this->group == $group)) {
             // clear the internal preload values
             $this->id = "";
-            $this->data = "";
+            $this->group = "";
+            $this->cachedata = "";
+            $this->userdata = "";
             $this->expires = -1;
             $this->unknown = true;
         }
         
     } // end func flushPreload
 
+    
     /**
     * Imports the requested datafields as object variables if allowed
     * 
@@ -324,8 +395,9 @@
                 
     } // end func setOptions
     
+    
     /**
-    * Encodes the data for the storage container
+    * Encodes the data for the storage container.
     * 
     * @var  mixed data to encode
     */
@@ -335,8 +407,10 @@
             return base64_encode(serialize($data));
         else 
             return addslashes(serialize($data));
+    
     } // end func encode
     
+    
     /**
     * Decodes the data from the storage container.
     * 
@@ -352,4 +426,4 @@
     } // end func decode
     
 }
-?>
+?>
\ No newline at end of file

-- 
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
To contact the list administrators, e-mail: [EMAIL PROTECTED]

Reply via email to