/**
  * Resets the registry.
  *
  * The criteria for what gets reset is based on what can be shared between sites on the same request when switch_to_blog
  * is used in a multisite install.  Here is a list of things that are NOT reset.
  *
  * - $_dependency_map
  * - $_class_abbreviations
  * - $NET_CFG (EE_Network_Config): The config is shared network wide so no need to reset.
  * - $REQ:  Still on the same request so no need to change.
  * - $CAP: There is no site specific state in the EE_Capability class.
  * - $SSN: Although ideally, the session should not be shared between site switches, we can't reset it because only one Session
  *         can be active in a single request.  Resetting could resolve in "headers already sent" errors.
  * - $addons:  In multisite, the state of the addons is something controlled via hooks etc in a normal request.  So
  *             for now, we won't reset the addons because it could break calls to an add-ons class/methods in the
  *             switch or on the restore.
  * - $modules
  * - $shortcodes
  * - $widgets
  *
  * @param boolean $hard whether to reset data in the database too, or just refresh
  * the Registry to its state at the beginning of the request
  * @param boolean $reinstantiate whether to create new instances of EE_Registry's singletons too,
  * or just reset without re-instantiating (handy to set to FALSE if you're not sure if you CAN
  * currently reinstantiate the singletons at the moment)
  * @param   bool    $reset_models    Defaults to true.  When false, then the models are not reset.  This is so client
  *                                  code instead can just change the model context to a different blog id if necessary
  *
  * @return EE_Registry
  */
 public static function reset($hard = false, $reinstantiate = true, $reset_models = true)
 {
     $instance = self::instance();
     EEH_Activation::reset();
     //properties that get reset
     $instance->_cache_on = true;
     $instance->CFG = EE_Config::reset($hard, $reinstantiate);
     $instance->CART = null;
     $instance->MRM = null;
     $instance->LIB = new stdClass();
     //messages reset
     EED_Messages::reset();
     if ($reset_models) {
         foreach (array_keys($instance->non_abstract_db_models) as $model_name) {
             $instance->reset_model($model_name);
         }
     }
     return $instance;
 }