Page tree
Skip to end of metadata
Go to start of metadata

Introduction

A schema variant is an object that can hold a single piece of data of a particular type. That data can be assigned a new value of the same or different type.

The fundamental types are:

TypeDescriptionFunction to set
boolA standard C++ boolean type with true and false valuesSchemaVariantSetBool
doubleA double precision floating pointSchemaVariantSetNumber
LPCWSTRA Unicode stringSchemaVariantSetString
void *Any arbitrary dataSchemaVariantSetPointer

 

Creating/Destroying

To create a schema variant you call SchemaVariantCreate followed by a call to set some data into it with the appropriate function. Until you have set data into the newly created schema variant the type of the schema variant will be SystemType::Undefined. Calling schema variant functions on undefined schema variants may fail.

When you are finished with a schema variant call SchemaVariantDelete to free the schema variant.

Example

 

Setting/Changing

You can set/change the value and type of a schema variant with the following calls

FunctionDescriptionResulting type
SchemaVariantSetBoolSets the schema variant to a boolean valueSystemType::Boolean
SchemaVariantSetNumberSets the schema variant to a double valueSystemType::ANumber
SchemaVariantSetStringSets the schema variant to a string valueSystemType::AString
SchemaVariantSetPointerSets the schema variant to a pointerThe user defined type
SchemaVariantSetSets a schema variant from another schema variantSame as source schema variant

Example

 

When setting the schema variable to an object pointer you specify the type of the stored object in the function call. This can be a TypeHash of your construction or one pre-defined types if the object you are storing matches the type. 

TypeObject pointed to
SystemType::Byteunsigned char
SystemType:Charchar
SystemType:;DateTimeQbik private
SystemType::Int16Signed 16 bit integer
SystemType::Int32Signed 32 bit integer
SystemType::Int64Signed 64 bit integer
SystemType::IP4AddressQbik private
SystemType::UInt16Unsigned 16 bit integer
SystemType::UInt32Unsigned 32 bit integer
SystemType::UInt64Unsigned 64 bit integer
SystemType::SingleSingle precision float
SystemType::DoubleDouble precision float
SystemType::Stringstd::wstring
SystemType::StringAstd::string

In typical situations the fundamental type Double can handle most needs. The other fundamental types are there primarily for support of schema members registered with SchemaClassRegisterMember so the schema framework knows how to access the member within the offset of the object.

 

Classes

Sometimes the schema framework may need to call functions for a schema variant in order to perform operations like casts. This may require the schema framework to know what class the schema variant belongs to. If you will need to perform class based operations on your schema variants then you should set a schema class for the schema variant by calling SchemaVariantSetSchema

 

Coercion

Coercion of schema variants is the act of forcing a schema variant to another type. The schema variant set functions (SchemaVariantSetBool etc) perform a coercion to the requested type before setting the value. The rules for coercion are as follows.

  • If the requested type is the same as the schema variant type then no change to the schema variant occurs
  • If the requested type is different to the schema variant type and the requested type is one of the standard types (Undefined, ANumber, AString or Boolean) then the type is changed and the value of the variant is set to the default for that type.
  • If the requested type is any other type the type of the schema variant is changed but the value is not. In this situation you should not read from the schema variant as the value will likely NOT be what you want.

 

You can also coerce a schema variant yourself with SchemaVariantCoerce

 

 

Table of Contents

  • No labels