Initial commit
This commit is contained in:
145
Include/ZUtil/ZRegistry.hpp
Normal file
145
Include/ZUtil/ZRegistry.hpp
Normal file
@@ -0,0 +1,145 @@
|
||||
/*
|
||||
ZRegistry.hpp
|
||||
Author: James Russell <jcrussell@762studios.com>
|
||||
Created: 2/18/2013
|
||||
|
||||
Purpose:
|
||||
|
||||
ZRegistry defines a use case for ZKVTree as a concurrent data store. A ZRegistry
|
||||
maps keys to values using path strings, just as ZKVTree does, but the path string
|
||||
must be unique as subscripts are not supported and siblings with the same name
|
||||
are not supported.
|
||||
|
||||
ZRegistry is thread-safe on all operations.
|
||||
|
||||
ZRegistry (currently) supports only string value types, but the return value struct
|
||||
from 'Get' can be converted to integer and double types with the Convert() function.
|
||||
|
||||
License:
|
||||
|
||||
TODO
|
||||
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#ifndef _ZREGISTRY_HPP
|
||||
#define _ZREGISTRY_HPP
|
||||
|
||||
#include <ZUtil/ZConcurrency.hpp>
|
||||
#include <ZUtil/ZKVTree.hpp>
|
||||
|
||||
class ZRegistry
|
||||
{
|
||||
public:
|
||||
/*
|
||||
Default Constructor.
|
||||
*/
|
||||
ZRegistry();
|
||||
|
||||
/*
|
||||
Constructs this registry from a KVTree.
|
||||
*/
|
||||
ZRegistry(const ZKVTree& _tree);
|
||||
|
||||
/*
|
||||
Destructor.
|
||||
*/
|
||||
~ZRegistry();
|
||||
|
||||
/*
|
||||
ZRegistry value type, which will evaluate to true if the value was found
|
||||
and false otherwise.
|
||||
*/
|
||||
class Value
|
||||
{
|
||||
friend class ZRegistry;
|
||||
public:
|
||||
/*
|
||||
Operator overload used to get the value.
|
||||
*/
|
||||
operator ZString () const
|
||||
{ return Val; }
|
||||
|
||||
/*
|
||||
Function used to verify validity of the returned value.
|
||||
*/
|
||||
bool Valid() const
|
||||
{ return bValid; }
|
||||
|
||||
/*
|
||||
Function used to get the string value.
|
||||
*/
|
||||
const ZString& GetString() const
|
||||
{ return Val; }
|
||||
|
||||
int GetInt() const
|
||||
{ return ZStringAlgo::NumericInt(Val); }
|
||||
|
||||
double GetDouble() const
|
||||
{ return ZStringAlgo::NumericDouble(Val); }
|
||||
|
||||
private:
|
||||
/*
|
||||
Constructor, which initializes the reference and the flag indicating
|
||||
whether or not this is a valid value.
|
||||
*/
|
||||
Value(const ZString& _val, bool _valid)
|
||||
: Val(_val), bValid(_valid) { }
|
||||
|
||||
ZString Val; //Value copy (cannot maintain reference into data structure)
|
||||
bool bValid; //Validity flag
|
||||
};
|
||||
|
||||
/*
|
||||
public ZRegistry::operator []
|
||||
|
||||
[] operator overload, equivalent to Get(_key).
|
||||
|
||||
@param _key - the key to look up
|
||||
@return (const ZString&) - the value looked up
|
||||
*/
|
||||
const Value operator [] (const ZString& _key) const
|
||||
{ return Get(_key); }
|
||||
|
||||
/*
|
||||
public ZRegistry::Erase
|
||||
|
||||
Erases a key/value pair (and all child key/value pairs) from the registry.
|
||||
|
||||
@param _key - the key to erase
|
||||
@return (void)
|
||||
*/
|
||||
void Erase(const ZString& _key);
|
||||
|
||||
/*
|
||||
public ZRegistry::Get
|
||||
|
||||
Returns the value instance bound to the given key.
|
||||
|
||||
@param _key - the key to evaluate
|
||||
@return (Value) - value instance for this key
|
||||
*/
|
||||
const Value Get(const ZString& _key) const;
|
||||
|
||||
/*
|
||||
public ZRegistry::Put
|
||||
|
||||
Places a key / value pair into the registry. Will create any necessary nodes
|
||||
to place the key and value pair.
|
||||
|
||||
@param _key - the key to map
|
||||
@param _value - the value to map to the key
|
||||
@return (bool) - true if able to map the key/value, false otherwise
|
||||
*/
|
||||
bool Put(const ZString& _key, const ZString& _value);
|
||||
|
||||
private:
|
||||
DISABLE_COPY_AND_ASSIGN(ZRegistry);
|
||||
|
||||
ZReadWriteLock Lock; //The concurrency read write lock
|
||||
ZKVTree Tree; //The tree we store out data in
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
Reference in New Issue
Block a user