Files
Webcam/include/framework/data/nvariant.h
2026-06-22 11:49:35 +02:00

137 lines
2.8 KiB
C++

/* -----------------------------------------------------------------------------
GSFramework
Copyright 2001-2013 Emmanuel Julien. All Rights Reserved.
----------------------------------------------------------------------------- */
#ifndef __NVARIANT__
#define __NVARIANT__
#include "nstring/nstring.h"
namespace GS {
/*!
@short Base property.
@author Emmanuel Julien (ejulien@gsworks.fr)
*/
class Variant
{
public:
enum Type
{
VariantNone = 0,
VariantFloat,
VariantBool,
VariantInteger,
VariantString,
VariantBinary
};
protected:
void Reset();
public:
/*!
@name Property value.
@{
*/
Type type;
union
{
char *d_value;
bool b_value;
float f_value;
int i_value;
uint u_value;
};
size_t d_size; /// Binary data size.
String s_value;
/// @}
String id; ///< Variant id.
bool operator < (const Variant &b) const;
bool operator > (const Variant &b) const;
bool operator == (const Variant &b) const;
bool operator != (const Variant &b) const;
Variant &operator = (bool v);
Variant &operator = (int v);
Variant &operator = (uint v);
Variant &operator = (const char *v);
Variant &operator = (float v);
Variant &operator = (const Variant &v);
/// Get property type.
Type GetType() const { return type; }
/// Free current property value.
void Free();
/// Get string value.
bool Get(const char * &v) const;
/// Get bool value.
bool Get(bool &v) const;
/// Get integer value.
bool Get(int &v) const;
/// Get unsigned value.
bool Get(uint &v) const;
/// Get float value.
bool Get(float &v) const;
/// Set binary data.
bool SetBinary(const void *data, size_t size);
/// Get binary data.
bool GetBinary(void *&data, size_t &size) const;
/// Direct access to the binary buffer.
void *GetBinaryBuffer() const { return GetType() == VariantBinary ? (void *)d_value : 0; }
/// Binary buffer size.
size_t GetBinarySize() const { return GetType() == VariantBinary ? d_size : 0; }
/// Get children array.
bool Get(List <Variant *> &a);
Variant(const char *v)
{ Reset(); *this = v; }
Variant(bool v)
{ Reset(); *this = v; }
Variant(int v)
{ Reset(); *this = v; }
Variant(uint v)
{ Reset(); *this = v; }
Variant(float v)
{ Reset(); *this = v; }
Variant(void *d, size_t l)
{ Reset(); SetBinary(d, l); }
Variant(const char *i, const char *v)
{ Reset(); id = i; *this = v; }
Variant(const char *i, bool v)
{ Reset(); id = i; *this = v; }
Variant(const char *i, int v)
{ Reset(); id = i; *this = v; }
Variant(const char *i, uint v)
{ Reset(); id = i; *this = v; }
Variant(const char *i, float v)
{ Reset(); id = i; *this = v; }
Variant()
{ Reset(); }
~Variant();
};
}
#endif // __NVARIANT__