Files
predis/lib/Predis/Transaction/MultiExecState.php
T
Daniele Alessandri 84e0f5af7a Extract the tracking of transaction states to a separate class.
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.
2013-11-17 13:15:36 +01:00

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);
}
}