<?php 
/* 
============================================================================================================================================= 
|   This file is part of a project released under the terms of the Xyndravandria PHP License (XyndravandriaPHPLicense.txt).                 | 
|                                                                                                                                           | 
|   You should be given a copy of the Xyndravandria PHP License (XyndravandriaPHPLicense.txt) within the same directory as the README.md;   | 
|   if not, you can get a copy at http://Xyndravandria.ohost.de/XyndravandriaPHPLicense.txt .                                               | 
|                                                                                                                                           | 
|   The copyright (c) of this project is owned by Mauro Di Girolamo <[email protected]>.                                              | 
============================================================================================================================================| 
 
 
 
Xyndravandria Dyverath 
---------------------- 
Alpha 0.0.0 
 
Xyndravandria is the name of a collection of projects designed and developed by Mauro Di Girolamo ([email protected]); he is therefore the copyright (c) owner of Xyndravandria itself and all of its projects. 
 
Xyndravandria Dyverath is released under the terms of the Xyndravandria PHP License (XyndravandriaPHPLicense.txt). You should be given a copy of the Xyndravandria PHP License (XyndravandriaPHPLicense.txt) within the same directory as the README.md; if not, you can get a copy at http://Xyndravandria.ohost.de/XyndravandriaPHPLicense.txt . There might be a release under a freer license for a later, more stable version. 
 
The documentation is either included in ./admin_media/Documentation/ or can be read at http://Xyndravandria.ohost.de/Dyverath/Documentation/. 
 
All projects: 
 
   Xyndravandria Averazain 
   http://github.com/MauroDiGirolamo/Xyndravandria_Averazain 
   PHP 
   Averazain is an Ajax framework supporting also JavaScript disabled clients perfectly - including search engines like Google. 
    
   Xyndravandria Dyverath 
   http://github.com/MauroDiGirolamo/Xyndravandria_Dyverath 
   PHP 
   Dyverath is a database access wrapper. 
    
   Xyndravandria Erozaver 
   http://github.com/MauroDiGirolamo/Xyndravandria_Erozaver 
   PHP 
   Erozaver is a class extending the type hinting given by the PHP engine (additional support for basic type hinting and size constraints). 
    
   Xyndravandria Mondraviel 
   http://github.com/MauroDiGirolamo/Xyndravandria_Mondraviel 
   PHP 
   Mondraviel is a class used to separate HTML from PHP code by firstly register models - files containing place holders embedded in HTML code - and then later fill them dynamically with content by passing values for the place holders. 
*/ 
 
namespace Xyndravandria\Dyverath; 
 
/// A class to Cache a certain types of instances. @n 
/// The class of theses objects has to implement the 
/// Cacheable interface. 
/// @abstract 
class Cache { 
    
   /// The objects in the Cache. 
   /// <dl class = "type"><dt><b>%Type:</b></dt> 
   /// <dd>array of Cache::$Type</dd></dl> 
   /// @private  
   private $Object; 
    
   /// The last object cached. 
   /// <dl class = "return"><dt><b>%Type:</b></dt> 
   /// <dd>Cache::$Type</dd></dl> 
   /// @private  
   private $CurrentObject = null; 
    
   /// The class of the instances to be saved. 
   /// <dl class = "type"><dt><b>%Type:</b></dt> 
   /// <dd>string</dd></dl> 
   /// @private  
   private $Class; 
    
   /// Creates a new Cache. 
   /// @public 
   /// @param string $Class: The class of the instances 
   /// to Cache. 
   public function __construct( $Class ) { 
      //\settype( $Class, 'string' ); 
      $this->Object = array( ); 
      $this->Class = $Class; 
      return; 
   } 
    
   /// Adds an object to the Cache. 
   /// @public 
   /// @param object $Object: The object to be added to 
   /// the Cache. 
   public function Add( $Object ) { 
      //\settype( $Object, 'object' ); 
      if( \get_class( $Object ) != $this->Class ) 
         throw new XyndravandriaDyverathException( 'Unable to add $Object to the Cache, since its class is not \'' . $this->Class . '\'.' ); 
      else if( ! ( $Object instanceof Cacheable ) ) 
         throw new XyndravandriaDyverathException( 'Unable to add $Object to the Cache, since it dies not implement Cacheable.' ); 
      else if( $this->Get( $Object->UniqueIdentifier( ) ) ) 
         throw new XyndravandriaDyverathException( 'Unable to add $Object to the Cache, since it is already saved.' ); 
      else 
         return $this->Object[ ] = $this->CurrentObject = $Object; 
      return; 
   } 
    
   /// Gets an object in the Cache by its unique 
   /// identifier. 
   /// @public  
   /// @param string $UniqueIdentifier: The unique 
   /// identifier of the object to get. 
   /// @returns Cache::$Type or false 
   public function Get( $UniqueIdentifier ) { 
      //\settype( $UniqueIdentifier, 'string' ); 
      foreach( $this->Object as $Object ) 
         if( $Object->UniqueIdentifier( ) == $UniqueIdentifier ) 
            return $Object; 
      return false; 
   } 
      
   /// Returns Cache::$CurrentObject. 
   /// @public  
   /// @returns Cache::$Type or null 
   public function CurrentObject( ) { 
      return $this->CurrentObject; 
   } 
    
} 
 
/// The interface of CacheableObject. 
interface Cacheable { 
    
   /// Should return the Cacheable object's Cache. 
   /// @public        
   /// @static       
   /// @returns Cache 
   static function Cache( ); 
    
   /// Gets an identifier which is unique for all 
   /// instances of the class which implements this 
   /// interface. 
   /// @public 
   /// @returns string 
   function UniqueIdentifier( ); 
    
   /// Should be overriden in a subclass and then return 
   /// its declared name without the namespace. 
   /// @abstract 
   /// @static       
   /// @returns string 
   static function ClassName( ); 
    
} 
?> 
 
 |