VValue

From Armagetron

Intro

vValue holds stuff that gives a value. It should be used for any and all configuration things. Especially when DCT is usable. Lucifer envisioned a class that could return any arbitrary data type to a hud widget. wrtlprnft implemented it as gHudValue and cleaning it up conceptually. ph added some collection stuff when he needed a class to solve a very similar problem. Luke modularized it and made an expression parser. Nobody really knows how it all works.

How To Use It

Basic Type

You'll want either vValue::Expr::Core::Base* or vValue::Type::BasePtr depending on what your use is, what day of the week you're born on, etc...

Construction

you make the vValue either C++ style:

e = new classname(arguments);

... by parsing a string:

e = vValue::Parser::parse("3 + 2 / 8");

... or by asking the vValue registry to do it for you:

std::vector<tString> flags;
arglist args;
flags.push_back("func");
args.push_back(vValue::Expr::Core::Int(7));
e = vValue::Registry::theRegistry.create(flags, "classname", args);

Getting the Value

GetValue

to get the value, you use GetValue:

e->GetValue()

Get<>

GetValue returns a Variant, which could be a string, float, integer, you name it! Since you usually have a particular type in mind that you need, it's better to use Get<>:

e->Get<float>()

vValue Classes

values/vCore

This defines the core stuff needed for vValue.

vValue::Expr::Core

Core expression classes.

Base

This is just your basic expression. It doesn't do much useful. Its value is null.

Number<typename CType>

This template is used to define both Int and Float.

Int

Int holds a literal integer value.

Float

Float holds a literal floating point number value.

String

String holds a literal tString value.

UnaryOp

A base class for unary operators, such as Expr::Logic::Not

BinaryOp

A base class for binary operators, such as Expr::Math::Add

vValue::Type

You can omit the '::Type' if you want. These are types defined for vValue.

Set

TODO: someone who knows, describe it!

BasePtr

It's a shared pointer to an expression object. It automatically deletes when nobody wants it anymore...

Variant

This could be any literal value. Right now, this means either int, float, or tString.

arglist

This is just a deque of BasePtr arguments to pass to the registry for construction of a new expression.

vValue::Creator<>

This template is more or less an automatic factory. It turns constructors into static functions so you can pass a pointer to it.

values/vParser

vValue::Parser

This is the expression parser. It takes a tString and turns it into a tree of vValue expressions.

values/vRegistry

The registry allows expressions to be registered as functions to be called from strings the Parser takes.

vValue::Registry

Registration

This class is used to register a function:

Registration register_sin("func\nmath", "sin", 1, (Registration::fptr)
                          ( ctor::a1* )& Creator<Trig::Sin>::create<BasePtr> );
Registry

This is the class for the registry itself, instancised as theRegistry.

theRegistry

This is the registry. It is used to dynamically create expression classes that are registered with it.

ctor

These are static constructor function definitions, for a number of arguments. ctor::a0 is a ctor that has no arguments.

values/vCollection

TODO: I have no idea how this is supposed to work-- ph?

vValue::MiscWTF

FooPtrOps

TODO

myCol

TODO

vValue::Expr::Collection

BaseExt
ColNode
ColUnary
ColPickOne
ColBinary
ColUnion
ColItersection
ColDifference

values/veComparison

vValue::Expr::Comparison

GreaterThan

> operator

GreaterOrEquals

>= operator

Equals

== operator

LessOrEquals

<= operator

LessThan

< operator

Compare

<=> operator -- return -1 if <, 0 if ==, or 1 if >

if !(x<y||x==y||x>y)&&x!=y (NANs happen to act like that), then it returns NAN.

values/veLogic

vValue::Expr::Logic

Condition

a1 ?: a2 !: a3

Not

!arg

values/veMath

vValue::Expr::Math

Add =

+ operator

Subtract

- operator

Multiply
  • operator
Divide

/ operator

Random

A random integer.

vValue::Expr::Math::Trig

Sin

The radial sine of its argument.

values/vebCFunction

This file provides templates for simple C function bindings.

vValue::Expr::Bindings::CFunction

CfZeroary<typename ReturnType, FunctionPtr>

This template wraps a C function with no arguments.

CfUnary<typename ReturnType, FunctionPtr, typename ArgType>

This template wraps a C function with one argument.

CfBinary<typename ReturnType, FunctionPtr, typename Arg1Type, typename Arg2Type>

This template wraps a C function with two arguments.

values/vebLegacy

TODO

vValue::Expr::Bindings::Legacy

Callback??
ConfItem??

values/vebMathExpr

vValue::Expr::Bindings::MathExpr

TODO