mirror of
https://github.com/predis/predis.git
synced 2026-08-24 14:59:31 +00:00
84e0f5af7a
The Predis\Transaction\MultiExecState class is actually quite dummy as it does not work as a finite-state machine, but is used to track state using flags. It basically replicates the same behaviour of when it was part of the Predis\Transaction\MultiExec code and it will do for now.
166 lines
3.0 KiB
PHP
166 lines
3.0 KiB
PHP
<?php
|
|
|
|
/*
|
|
* This file is part of the Predis package.
|
|
*
|
|
* (c) Daniele Alessandri <suppakilla@gmail.com>
|
|
*
|
|
* For the full copyright and license information, please view the LICENSE
|
|
* file that was distributed with this source code.
|
|
*/
|
|
|
|
namespace Predis\Transaction;
|
|
|
|
/**
|
|
* Utility class used to track the state of a MULTI / EXEC transaction.
|
|
*
|
|
* @author Daniele Alessandri <suppakilla@gmail.com>
|
|
*/
|
|
class MultiExecState
|
|
{
|
|
const INITIALIZED = 1; // 0b00001
|
|
const INSIDEBLOCK = 2; // 0b00010
|
|
const DISCARDED = 4; // 0b00100
|
|
const CAS = 8; // 0b01000
|
|
const WATCH = 16; // 0b10000
|
|
|
|
private $flags;
|
|
|
|
/**
|
|
*
|
|
*/
|
|
public function __construct()
|
|
{
|
|
$this->flags = 0;
|
|
}
|
|
|
|
/**
|
|
* Sets the internal state flags.
|
|
*
|
|
* @param int $flags Set of flags
|
|
*/
|
|
public function set($flags)
|
|
{
|
|
$this->flags = $flags;
|
|
}
|
|
|
|
/**
|
|
* Gets the internal state flags.
|
|
*
|
|
* @return int
|
|
*/
|
|
public function get()
|
|
{
|
|
return $this->flags;
|
|
}
|
|
|
|
/**
|
|
* Sets one or more flags.
|
|
*
|
|
* @param int $flags Set of flags
|
|
*/
|
|
public function flag($flags)
|
|
{
|
|
$this->flags |= $flags;
|
|
}
|
|
|
|
/**
|
|
* Resets one or more flags.
|
|
*
|
|
* @param int $flags Set of flags
|
|
*/
|
|
public function unflag($flags)
|
|
{
|
|
$this->flags &= ~$flags;
|
|
}
|
|
|
|
/**
|
|
* Returns if the specified flag or set of flags is set.
|
|
*
|
|
* @param int $flags Flag
|
|
* @return bool
|
|
*/
|
|
public function check($flags)
|
|
{
|
|
return ($this->flags & $flags) === $flags;
|
|
}
|
|
|
|
/**
|
|
* Resets the state of a transaction.
|
|
*/
|
|
public function reset()
|
|
{
|
|
$this->flags = 0;
|
|
}
|
|
|
|
/**
|
|
* Returns the state of the RESET flag.
|
|
*
|
|
* @return bool
|
|
*/
|
|
public function isReset()
|
|
{
|
|
return $this->flags === 0;
|
|
}
|
|
|
|
/**
|
|
* Returns the state of the INITIALIZED flag.
|
|
*
|
|
* @return bool
|
|
*/
|
|
public function isInitialized()
|
|
{
|
|
return $this->check(self::INITIALIZED);
|
|
}
|
|
|
|
/**
|
|
* Returns the state of the INSIDEBLOCK flag.
|
|
*
|
|
* @return bool
|
|
*/
|
|
public function isExecuting()
|
|
{
|
|
return $this->check(self::INSIDEBLOCK);
|
|
}
|
|
|
|
/**
|
|
* Returns the state of the CAS flag.
|
|
*
|
|
* @return bool
|
|
*/
|
|
public function isCAS()
|
|
{
|
|
return $this->check(self::CAS);
|
|
}
|
|
|
|
/**
|
|
* Returns if WATCH is allowed in the current state.
|
|
*
|
|
* @return bool
|
|
*/
|
|
public function isWatchAllowed()
|
|
{
|
|
return $this->check(self::INITIALIZED) && !$this->check(self::CAS);
|
|
}
|
|
|
|
/**
|
|
* Returns the state of the WATCH flag.
|
|
*
|
|
* @return bool
|
|
*/
|
|
public function isWatching()
|
|
{
|
|
return $this->check(self::WATCH);
|
|
}
|
|
|
|
/**
|
|
* Returns the state of the DISCARDED flag.
|
|
*
|
|
* @return bool
|
|
*/
|
|
public function isDiscarded()
|
|
{
|
|
return $this->check(self::DISCARDED);
|
|
}
|
|
}
|