# Candera V3.0.0 Migration Guide

Following a guide how to uprade application code from V2.10.0 to V3.0.0 [Candera](http://dev.doc.cgistudio.at/APILINK/namespace_candera.html "[DataBinding_RefTypeSample]") Interfaces.

<div class="contents" id="bkmrk-migration-guide-for-"><div class="contents"><div class="textblock">- <span style="color: rgb(230, 126, 35);">[Migration Guide for Backward Compatible Interface Changes](https://doc316en.candera.eu/link/982#bkmrk-migration-guide-for--0)</span>
- <span style="color: rgb(230, 126, 35);">[Migration Guide for Breaking Interface Changes](https://doc316en.candera.eu/link/982#bkmrk-migration-guide-for--1)</span>

</div></div></div>Besides interface changes, also the build system has been changed significantly in V3.0.0:

<div class="contents" id="bkmrk-candera%2Ffeatstd-buil"><div class="contents"><div class="textblock">- <span style="color: rgb(230, 126, 35);">[Candera/FeatStd Build System Changes](https://doc316en.candera.eu/link/982#bkmrk-candera%2Ffeatstd-buil-0)</span>

</div></div></div><span style="color: rgb(230, 126, 35);">[Regular Expression Search and Replace Patterns](https://doc316en.candera.eu/link/982#bkmrk-regular-expression-s-0)</span>

---

#### **Migration Guide for Backward Compatible Interface Changes**

This page provides an overview about interface changes between [Candera](http://dev.doc.cgistudio.at/APILINK/namespace_candera.html "[DataBinding_RefTypeSample]") V2.10.0 and [Candera](http://dev.doc.cgistudio.at/APILINK/namespace_candera.html "[DataBinding_RefTypeSample]") V3.0.0, which are backward compatible.

##### Interface Changes with Deprecations

These changes do not require immediate adaptation of existing code. Although deprecated interfaces are still accessible, consider switching to the new interfaces as the deprecated interfaces will be removed with the next release.

<div class="contents" id="bkmrk-description-candera-"><div class="contents"><div class="textblock"><table border="1" class="doxtable" style="border-collapse: collapse; width: 800px;"><tbody><tr><th style="width: 18.6449%;">**Description**</th><th style="width: 33.8891%;">**[Candera](http://dev.doc.cgistudio.at/APILINK/namespace_candera.html "[DataBinding_RefTypeSample]") V2.10.0**</th><th style="width: 47.466%;">**[Candera](http://dev.doc.cgistudio.at/APILINK/namespace_candera.html "[DataBinding_RefTypeSample]") V3.0.0**</th></tr><tr><td style="width: 18.6449%;">TextAlignment</td><td style="width: 33.8891%;">TextAlignment ```
Leading
Middle
Trailing
```

</td><td style="width: 47.466%;">HorizontalAlignment ```
HLeft
HCenter
HRight
```

VerticalAlignment ```
VTop
VCenter
VBottom
```

</td></tr><tr><td style="width: 18.6449%;">Effect shared pointer types</td><td style="width: 33.8891%;">\[Effect\]Ptr

e.g.

```
BitmapBrushPtr
```

</td><td style="width: 47.466%;">\[Effect\]SharedPointer

e.g.

```
BitmapBrush::SharedPointer
```

</td></tr><tr><td style="width: 18.6449%;">const TreeTraverser</td><td style="width: 33.8891%;">```
class MyTraverser : public TreeTraverserBase<Node> {
    protected:
        virtual TraverserAction ProcessConstNode(const Node& node)
        {
        ...
        }
};
```

</td><td style="width: 47.466%;">```
class MyTraverser : public TreeTraverserBase<const Node> {
    protected:
        virtual TraverserAction ProcessNode(const Node& node)
        {
        ...
        }
};
```

</td></tr><tr><td style="width: 18.6449%;">[AssetDescriptor](http://dev.doc.cgistudio.at/APILINK/class_candera_1_1_asset_descriptor.html "Descriptor of the loaded asset.")</td><td style="width: 33.8891%;">```
<a class="code" href="http://dev.doc.cgistudio.at/APILINK/class_candera_1_1_default_asset_provider.html" title="Implements objects handling mechanisms. It implements the interface AssetProvider and holds an asset ...">Candera::DefaultAssetProvider</a>* provider = m_assetProvider;
<a class="code" href="http://dev.doc.cgistudio.at/APILINK/class_candera_1_1_asset_context.html" title="Encapsulates main list of objects' names that define an asset context. The scene context is provided ...">Candera::AssetContext</a>* assetContext = provider->GetAssetContext();
if (assetContext != 0) {
    for (Int i = 0; i < assetContext->GetAnimationCount(); i++) {
        const Candera::Char* animation = assetContext->GetAnimationName(i);
        //Use animation name
    }
}
```

</td><td style="width: 47.466%;">```
<a class="code" href="http://dev.doc.cgistudio.at/APILINK/class_candera_1_1_default_asset_provider.html" title="Implements objects handling mechanisms. It implements the interface AssetProvider and holds an asset ...">Candera::DefaultAssetProvider</a>* provider = m_assetProvider;
for (<a class="code" href="http://dev.doc.cgistudio.at/APILINK/class_candera_1_1_forward_iterator.html" title="Forward iterator wrapper.">Candera::AssetDescriptor::AssetIdIterator</a> animationIdIterator =  
        provider-><a class="code" href="http://dev.doc.cgistudio.at/APILINK/class_candera_1_1_default_asset_provider.html#ac6785af7778a6b1d4b15b10c2379b9c4" title="Retrieve the AssetDescriptor object associated to this DefaultAssetProvider instance.">GetAssetDescriptor</a>().<a class="code" href="http://dev.doc.cgistudio.at/APILINK/class_candera_1_1_asset_descriptor.html#a0d22d16a59544b51649d3a67330f5414" title="Get an iterator over object AssetIds.">GetAssetIdIterator</a>(<a class="code" href="http://dev.doc.cgistudio.at/APILINK/group___asset_loader_base.html#gga55cedfecc49c10372c78ba9f8e779cc2a22048a4d98d870ee3527a929b714f283" title="Library for AnimationPlayer objects.">AnimationLib</a>);
        animationIdIterator.IsValid(); ++animationIdIterator) {
    //use animation AssetId: *animationIdIterator
    //or use animation name: provider->GetNameById(AnimationLib, *animationIdIterator, 0)}
```

</td></tr><tr><td style="width: 18.6449%;">AssetId</td><td style="width: 33.8891%;">```
Bitmap::SharedPointer bitmap= Base::GetAssetProvider()->GetBitmap("MyModule#Imports#Models#myBmp");
```

</td><td style="width: 47.466%;">Assign a Symbol Name "myBmp" to the [Bitmap](http://dev.doc.cgistudio.at/APILINK/class_candera_1_1_bitmap.html "A 2-dimensional bitmap that can be used as a texture, background or sprite. A bitmap pointing to a va...") Asset and export headers in SceneComposer as "MyAssets.h". ```
#include "MyAssets.h"
Bitmap::SharedPointer bitmap = Base::GetAssetProvider()->GetBitmapById(CgiAssetNames::myBmp);
```

</td></tr><tr><td style="width: 18.6449%;">Animation namespace</td><td style="width: 33.8891%;">```
Candera::InterpolationStrategy* interpolationStrategy =
       <a class="code" href="http://dev.doc.cgistudio.at/APILINK/group___c_o_u_r_i_e_r___v_i_s_u_a_l_i_z_a_t_i_o_n.html#ggaf0e93dc4242f607c3c8d13dafd036af9aaabfa5309af24986d3111a092449f857">Candera::LinearInterpolationStrategy::Create</a>();
```

</td><td style="width: 47.466%;">```
Animation::InterpolationStrategy::SharedPointer interpolationStrategy =
       <a class="code" href="http://dev.doc.cgistudio.at/APILINK/group___c_o_u_r_i_e_r___v_i_s_u_a_l_i_z_a_t_i_o_n.html#ggaf0e93dc4242f607c3c8d13dafd036af9aaabfa5309af24986d3111a092449f857">Animation::LinearInterpolationStrategy::Create</a>();
```

</td></tr><tr><td style="width: 18.6449%;">New namespace CgiWidgetLibrary</td><td style="width: 33.8891%;">no namespace required</td><td style="width: 47.466%;">```
using namespace CgiWidgetLibrary;
```

</td></tr><tr><td style="width: 18.6449%;">3D Shallow cloning with flat traversing</td><td style="width: 33.8891%;">```
Node* clone = node->Clone();
```

or ```
Node* clone = node->Clone(<a class="code" href="http://dev.doc.cgistudio.at/APILINK/class_candera_1_1_node.html#aa40eb44bf6f1b812ebd941db38999d39ad30f69f69d7d2693d59eb071310e3dc1" title="Only this Node.">Node::Flat</a>);
```

</td><td style="width: 47.466%;">```
Node* clone = node->Clone();
```

</td></tr><tr><td style="width: 18.6449%;">3D Shallow cloning with deep traversing</td><td style="width: 33.8891%;">```
Node* clone = node->Clone(<a class="code" href="http://dev.doc.cgistudio.at/APILINK/class_candera_1_1_node.html#aa40eb44bf6f1b812ebd941db38999d39a79176f5f30aad3d343ab4d0e4be83f5c" title="This Node and all its descendants.">Node::Deep</a>);
```

</td><td style="width: 47.466%;">```
Node* clone = <a class="code" href="http://dev.doc.cgistudio.at/APILINK/group___cloning3_d.html#gaf1781cbf2a3e09d5d24d63bdf3685145" title="Specialization of TreeClonerBase for use with Node.">TreeCloner</a>().CreateClone(*node);
```

</td></tr><tr><td style="width: 18.6449%;">2D Shallow cloning with flat traversing</td><td style="width: 33.8891%;">```
Node2D* clone = node->Clone();
```

or ```
Node2D* clone = node->Clone(<a class="code" href="http://dev.doc.cgistudio.at/APILINK/class_candera_1_1_node2_d.html#a6df6b7520326b479dfddd918597539dfaa660f3b1c8b3074081822d2922617cab" title="Only this node.">Node2D::Flat</a>);
```

or ```
Node2D* clone = node->Clone(<a class="code" href="http://dev.doc.cgistudio.at/APILINK/namespace_candera.html#a22134b81a6f0af80cae7f7bb3d226fe8ad1dadd4d2a4dfb3f113fd19d0cfb158d" title="No child nodes are processed.">TraverseFlat</a>, <a class="code" href="http://dev.doc.cgistudio.at/APILINK/namespace_candera.html#a080306bf58aecbd8693110d7ae696ed8a3c2d8500f82fa0f9c1ca1c7a031ddb10" title="Only node properties are copied but attached content like effects are still shared.">CloneShallow</a>);
```

</td><td style="width: 47.466%;">```
Node2D* clone = node->Clone();
```

</td></tr><tr><td style="width: 18.6449%;">[Bitmap](http://dev.doc.cgistudio.at/APILINK/class_candera_1_1_bitmap.html "A 2-dimensional bitmap that can be used as a texture, background or sprite. A bitmap pointing to a va...") type/format changes</td><td style="width: 33.8891%;">```
UInt8* pixels = GetBitmapDataFromArbitrarySource(); //exemplary
Bitmap* bitmap = &Bitmap(128, 128, 
    <a class="code" href="http://dev.doc.cgistudio.at/APILINK/class_candera_1_1_bitmap.html#a573690d2335df7df1e42030121237308a24b6af53eb0c1d4bca837b9245078c79" title="Rgba.">Bitmap::RgbaFormat</a>, Bitmap::UnsignedByteType,
    Bitmap::PackAlignment1, pixels, 0,
    true, true);
```

</td><td style="width: 47.466%;">```
UInt8* pixels = GetBitmapDataFromArbitrarySource(); //exemplary
Bitmap* bitmap = &Bitmap(128, 128, 
    <a class="code" href="http://dev.doc.cgistudio.at/APILINK/class_candera_1_1_bitmap.html#a0028006b9fd5b6e630bc6aca572603cbaaac8f7acd8e25a68317ee29db03960f8" title="32 bit RGBA">Bitmap::RgbaUnsignedBytePixelFormat</a>,
    Bitmap::PackAlignment1, pixels, 0,0,
    true, true);
```

</td></tr><tr><td style="width: 18.6449%;">GetBoudingRectangle with ExcludeFinalAdvance, ActualTransversalSize</td><td style="width: 33.8891%;">```
bound = textRenderer.GetBoudingRectangle(layoutingOptions, shapingOptions, textProperties,
                        MeasuringOptions(ExcludeFinalAdvance, ActualTransversalSize));
```

</td><td style="width: 47.466%;">```
GlyphTextMeasureContext context;
textRenderer.Render(context, layoutingOptions, shapingOptions, textProperties);
bound = context.GetTextRectangle();
```

</td></tr><tr><td style="width: 18.6449%;">GetBoudingRectangle with IncludeFinalAdvance, ActualTransversalSize</td><td style="width: 33.8891%;">```
bound = textRenderer.GetBoudingRectangle(layoutingOptions, shapingOptions, textProperties,
                        MeasuringOptions(IncludeFinalAdvance, ActualTransversalSize));
```

</td><td style="width: 47.466%;">```
CursorTextMeasureContext cursorContext;
GlyphTextMeasureContext glyphContext;
glyphContext.SetNextContext(&cursorContext);
textRenderer.Render(glyphContext, layoutingOptions, shapingOptions, textProperties);
glyphBound = glyphContext.GetTextRectangle();
cursorBound = cursorContext.GetTextRectangle();
bound = Rectangle(
    glyphBound.GetLeft(),
    glyphBound.GetTop(),
    <a class="code" href="http://dev.doc.cgistudio.at/APILINK/class_candera_1_1_math.html#a9410892f373576c2925671789e91d2c0">Math::Maximum</a>(
        cursorBound.GetWidth() - glyphBound.GetLeft(),
        glyphBound.GetWidth()),
    glyphBound.GetHeight());
```

</td></tr><tr><td style="width: 18.6449%;">GetBoudingRectangle with ExcludeFinalAdvance, ContantTransversalSize</td><td style="width: 33.8891%;">```
bound = textRenderer.GetBoudingRectangle(layoutingOptions, shapingOptions, textProperties, 
                        MeasuringOptions(IncludeFinalAdvance, ContantTransversalSize));
```

</td><td style="width: 47.466%;">```
CursorTextMeasureContext cursorContext;
GlyphTextMeasureContext glyphContext;
glyphContext.SetNextContext(&cursorContext);
textRenderer.Render(glyphContext, layoutingOptions, shapingOptions, textProperties);
glyphBound = glyphContext.GetTextRectangle();
cursorBound = cursorContext.GetTextRectangle();
bound = Rectangle(
    glyphBound.GetLeft(),
    cursorBound.GetTop(),
    glyphBound.GetWidth()),
    cursorBound.GetHeight());
```

</td></tr><tr><td style="width: 18.6449%;">GetBoudingRectangle with IncludeFinalAdvance, ContantTransversalSize</td><td style="width: 33.8891%;">```
bound = textRenderer.GetBoudingRectangle(layoutingOptions, shapingOptions, textProperties, 
                        MeasuringOptions(IncludeFinalAdvance, ContantTransversalSize));
```

</td><td style="width: 47.466%;">```
CursorTextMeasureContext cursorContext;
GlyphTextMeasureContext glyphContext;
glyphContext.SetNextContext(&cursorContext);
textRenderer.Render(glyphContext, layoutingOptions, shapingOptions, textProperties);
glyphBound = glyphContext.GetTextRectangle();
cursorBound = cursorContext.GetTextRectangle();
bound = Rectangle(
    glyphBound.GetLeft(),
    cursorBound.GetTop(),
    <a class="code" href="http://dev.doc.cgistudio.at/APILINK/class_candera_1_1_math.html#a9410892f373576c2925671789e91d2c0">Math::Maximum</a>(
        cursorBound.GetWidth() - glyphBound.GetLeft(),
        glyphBound.GetWidth()),
    cursorBound.GetHeight());
```

</td></tr></tbody></table>

</div></div></div>##### Extended Interfaces

These changes extend existing interfaces by adding new functionality and do not require any adaptation of existing code. However, custom implementations may be replaced by these library functions.

<div class="contents" id="bkmrk-description-candera--0"><div class="contents"><div class="textblock"><table border="1" class="doxtable" style="border-collapse: collapse; width: 800px;"><tbody><tr><th>**Description**</th><th>**[Candera](http://dev.doc.cgistudio.at/APILINK/namespace_candera.html "[DataBinding_RefTypeSample]") V2.10.0**</th><th>**[Candera](http://dev.doc.cgistudio.at/APILINK/namespace_candera.html "[DataBinding_RefTypeSample]") V3.0.0**

</th></tr><tr><td>3D Deep cloning with flat traversing</td><td>No previous support.</td><td>```
Node* clone = node->Clone();
DeepNodeCloneStrategy cloneStrategy;
DeepNodeCloneStrategy::Pair pair(node, clone);
cloneStrategy.Execute(pair, pair);
```

</td></tr><tr><td>3D Deep cloning with deep traversing</td><td>No previous support.</td><td>```
Node* clone = DeepTreeCloner().CreateClone(*node);
```

or ```
<a class="code" href="http://dev.doc.cgistudio.at/APILINK/group___cloning3_d.html#gaf1781cbf2a3e09d5d24d63bdf3685145" title="Specialization of TreeClonerBase for use with Node.">TreeCloner</a> treeCloner;
DeepNodeCloneStrategy cloneStrategy;
treeCloner.SetNodeCloneStrategy(&cloneStrategy);
Node* clone = treeCloner.CreateClone(*node);
```

</td></tr></tbody></table>

</div></div></div>##### Header File Relocations

In CGI Studio 2.x, some functionality had been moved from [Candera](http://dev.doc.cgistudio.at/APILINK/namespace_candera.html "[DataBinding_RefTypeSample]") into FeatStd, keeping redirection macros and header files for backward compatibility. In CGI Studio 3.0.0, redirection code has been removed to a large extent. Following is an overview about macros and header files that will be removed.

##### Candera/System/Diagnostics Cleanup

<p class="callout warning">To ensure backward compatibility, macros and files formerly located in Candera/System/Diagnostics can still be accessed in CGI-Studio V3.0.0 . Please be aware that this access will be removed with the next release.</p>

Header files from `Candera/Systems/Diagnostics` which only represented redirections to files located in FeatStd should no longer be used.  
Please use respective files in `FeatStd/Diagnostics` and the namespace `Featstd::Diagnostics` instead.

<div class="contents" id="bkmrk-deprecated-use-inste"><div class="contents"><div class="textblock"><table border="1" class="doxtable" style="border-collapse: collapse; width: 800px;"><tbody><tr><th>**Deprecated**</th><th>**Use instead**</th></tr><tr><td>Candera/System/Diagnostics/Appender.h</td><td>FeatStd/Diagnostics/Appender.h</td></tr><tr><td>Candera/System/Diagnostics/CharBuffer.h</td><td>FeatStd/Diagnostics/CharBuffer.h</td></tr><tr><td>Candera/System/Diagnostics/ConsoleAppender.h</td><td>FeatStd/Diagnostics/ConsoleAppender.h</td></tr><tr><td>Candera/System/Diagnostics/Debug.h</td><td>FeatStd/Diagnostics/Debug.h</td></tr><tr><td>Candera/System/Diagnostics/DebuggerOutSystemMemoryStatistic.h</td><td>FeatStd/Diagnostics/DebuggerOutSystemMemoryStatistic.h</td></tr><tr><td>Candera/System/Diagnostics/ErrorHandling.h</td><td>FeatStd/Diagnostics/ErrorHandling.h</td></tr><tr><td>Candera/System/Diagnostics/FileAppender.h</td><td>FeatStd/Diagnostics/FileAppender.h</td></tr><tr><td>Candera/System/Diagnostics/LocationInfo.h</td><td>FeatStd/Diagnostics/LocationInfo.h</td></tr><tr><td>Candera/System/Diagnostics/LogControl.h</td><td>FeatStd/Diagnostics/Log.h</td></tr><tr><td>Candera/System/Diagnostics/LogEvent.h</td><td>FeatStd/Diagnostics/LogEvent.h</td></tr><tr><td>Candera/System/Diagnostics/Logger.h</td><td>FeatStd/Diagnostics/Logger.h</td></tr><tr><td>Candera/System/Diagnostics/LoggerTyped.h</td><td>FeatStd/Diagnostics/LoggerTyped.h</td></tr><tr><td>Candera/System/Diagnostics/LogLevel.h</td><td>FeatStd/Diagnostics/LogLevel.h</td></tr><tr><td>Candera/System/Diagnostics/Measurable.h</td><td>FeatStd/Diagnostics/Measurable.h</td></tr><tr><td>Candera/System/Diagnostics/SystemMemoryStatistic.h</td><td>FeatStd/Diagnostics/SystemMemoryStatistic.h</td></tr></tbody></table>

</div></div></div>Similarly, all macros contained in files located in `Candera/System/Diagnostics` which only served as redirection to macros located in FeatStd should not be used any more.

<div class="contents" id="bkmrk-deprecated-use-inste-0"><div class="textblock"><table border="1" class="doxtable" style="border-collapse: collapse; width: 800px;"><tbody><tr><th>**Deprecated**</th><th>**Use instead**</th></tr><tr><td>CANDERA\_DEBUG\_BREAK</td><td>FEATSTD\_DEBUG\_BREAK</td></tr><tr><td>CANDERA\_DEBUG\_ASSERT</td><td>FEATSTD\_DEBUG\_ASSERT</td></tr><tr><td>CANDERA\_DEBUG\_FAIL</td><td>FEATSTD\_DEBUG\_FAIL</td></tr><tr><td>CANDERA\_DEBUG\_REENTRANCE\_GUARD</td><td>FEATSTD\_DEBUG\_REENTRANCE\_GUARD</td></tr><tr><td>CANDERA\_COMPILETIME\_ASSERT</td><td>FEATSTD\_COMPILETIME\_ASSERT</td></tr><tr><td>CANDERA\_UNUSED\_PARAMETER</td><td>FEATSTD\_UNUSED</td></tr><tr><td>CANDERA\_PANIC</td><td>FEATSTD\_PANIC</td></tr><tr><td>CANDERA\_PANIC\_IF</td><td>FEATSTD\_PANIC\_IF</td></tr><tr><td>CANDERA\_LOG\_FUNC</td><td>FEATSTD\_LOG\_FUNC</td></tr><tr><td>CANDERA\_LOG\_LOCATION</td><td>FEATSTD\_LOG\_LOCATION</td></tr><tr><td>CANDERA\_LOG\_SET\_REALM</td><td>FEATSTD\_LOG\_SET\_REALM</td></tr><tr><td>CANDERA\_LOG\_DEBUG</td><td>FEATSTD\_LOG\_DEBUG</td></tr><tr><td>CANDERA\_LOG\_INFO</td><td>FEATSTD\_LOG\_INFO</td></tr><tr><td>CANDERA\_LOG\_WARN</td><td>FEATSTD\_LOG\_WARN</td></tr><tr><td>CANDERA\_LOG\_ERROR</td><td>FEATSTD\_LOG\_ERROR</td></tr><tr><td>CANDERA\_LOG\_FATAL</td><td>FEATSTD\_LOG\_FATAL</td></tr><tr><td>CANDERA\_LOG\_REALM</td><td>FEATSTD\_LOG\_REALM</td></tr><tr><td>CANDERA\_LOG</td><td>FEATSTD\_LOG</td></tr></tbody></table>

</div></div>---

#### **Migration Guide for Breaking Interface Changes**

These changes are incompatible with earlier versions of [Candera](http://dev.doc.cgistudio.at/APILINK/namespace_candera.html "[DataBinding_RefTypeSample]") and will require immediate adaptation of existing code.

##### Interface Changes without Deprecations

<div class="header" id="bkmrk-description-candera--1"><div class="header"><div class="headertitle"><div class="title"><div class="contents"><div class="contents"><div class="textblock"><table border="1" class="doxtable" style="border-collapse: collapse; width: 800px;"><tbody><tr><th style="width: 16.9345%;">**Description**</th><th style="width: 38.4373%;">**[Candera](http://dev.doc.cgistudio.at/APILINK/namespace_candera.html "[DataBinding_RefTypeSample]") V2.10.0**</th><th style="width: 44.6282%;">**[Candera](http://dev.doc.cgistudio.at/APILINK/namespace_candera.html "[DataBinding_RefTypeSample]") V3.0.0**</th></tr><tr><td style="width: 16.9345%;">Shared pointers in animation framework</td><td style="width: 38.4373%;">```
AnimationController* animController = <a class="code" href="http://dev.doc.cgistudio.at/APILINK/group___c_o_u_r_i_e_r___v_i_s_u_a_l_i_z_a_t_i_o_n.html#ggaf0e93dc4242f607c3c8d13dafd036af9aaabfa5309af24986d3111a092449f857">AnimationController::Create</a>();
AnimationTimeDispatcher* animDispatcher = <a class="code" href="http://dev.doc.cgistudio.at/APILINK/group___c_o_u_r_i_e_r___v_i_s_u_a_l_i_z_a_t_i_o_n.html#ggaf0e93dc4242f607c3c8d13dafd036af9aaabfa5309af24986d3111a092449f857">AnimationTimeDispatcher::Create</a>();
InterpolationStrategy* interpolationStrategy = <a class="code" href="http://dev.doc.cgistudio.at/APILINK/group___c_o_u_r_i_e_r___v_i_s_u_a_l_i_z_a_t_i_o_n.html#ggaf0e93dc4242f607c3c8d13dafd036af9aaabfa5309af24986d3111a092449f857">SplineInterpolationStrategy::Create</a>();
BackEaseFunction backEase;
```

</td><td style="width: 44.6282%;">```
AnimationController::SharedPointer animController = <a class="code" href="http://dev.doc.cgistudio.at/APILINK/group___c_o_u_r_i_e_r___v_i_s_u_a_l_i_z_a_t_i_o_n.html#ggaf0e93dc4242f607c3c8d13dafd036af9aaabfa5309af24986d3111a092449f857">AnimationController::Create</a>();
AnimationTimeDispatcher::SharedPointer animDispatcher = <a class="code" href="http://dev.doc.cgistudio.at/APILINK/group___c_o_u_r_i_e_r___v_i_s_u_a_l_i_z_a_t_i_o_n.html#ggaf0e93dc4242f607c3c8d13dafd036af9aaabfa5309af24986d3111a092449f857">AnimationTimeDispatcher::Create</a>();
InterpolationStrategy::SharedPointer interpolationStrategy = <a class="code" href="http://dev.doc.cgistudio.at/APILINK/group___c_o_u_r_i_e_r___v_i_s_u_a_l_i_z_a_t_i_o_n.html#ggaf0e93dc4242f607c3c8d13dafd036af9aaabfa5309af24986d3111a092449f857">SplineInterpolationStrategy::Create</a>();
BackEaseFunction::SharedPointer backEase = <a class="code" href="http://dev.doc.cgistudio.at/APILINK/group___c_o_u_r_i_e_r___v_i_s_u_a_l_i_z_a_t_i_o_n.html#ggaf0e93dc4242f607c3c8d13dafd036af9aaabfa5309af24986d3111a092449f857">BackEaseFunction::Create</a>();
```

</td></tr><tr><td style="width: 16.9345%;">Shared pointers and Create methods for animation property setters instead of constructors</td><td style="width: 38.4373%;">e.g. ```
Candera::Transformable2DTranslateYPropertySetter transitionPS();
Candera::MaterialPropertySetter materialPS();
```

</td><td style="width: 44.6282%;">e.g.

```
Candera::Transformable2DTranslateYPropertySetter::SharedPointer transitionPS = <a class="code" href="http://dev.doc.cgistudio.at/APILINK/group___c_o_u_r_i_e_r___v_i_s_u_a_l_i_z_a_t_i_o_n.html#ggaf0e93dc4242f607c3c8d13dafd036af9aaabfa5309af24986d3111a092449f857">Transformable2DTranslateYPropertySetter::Create</a>();
Candera::MaterialPropertySetter::SharedPointer materialPS = <a class="code" href="http://dev.doc.cgistudio.at/APILINK/group___c_o_u_r_i_e_r___v_i_s_u_a_l_i_z_a_t_i_o_n.html#ggaf0e93dc4242f607c3c8d13dafd036af9aaabfa5309af24986d3111a092449f857">MaterialPropertySetter::Create</a>();
```

</td></tr><tr><td style="width: 16.9345%;">Shared pointer destruction</td><td style="width: 38.4373%;">```
Bitmap* bmp = CANDERA_NEW(...);
CANDERA_DELETE(bmp);
bmp = 0;
```

</td><td style="width: 44.6282%;">SharedPointers may not be manually disposed, freed or deleted. Additionally SharedPointers cannot be set to NULL in the same way as pointers. According code has to be removed:

```
Bitmap::SharedPointer bmp = <a class="code" href="http://dev.doc.cgistudio.at/APILINK/class_candera_1_1_bitmap.html#a53c1f585b24819ae815fbeb54820fe23">Bitmap::Create</a>(...);
// no manual destruction
// no need to set to zero / NULL
```

</td></tr><tr><td style="width: 16.9345%;">[Bitmap](http://dev.doc.cgistudio.at/APILINK/class_candera_1_1_bitmap.html "A 2-dimensional bitmap that can be used as a texture, background or sprite. A bitmap pointing to a va...") as SharedPointer</td><td style="width: 38.4373%;">```
Bitmap bitmap(...);
```

</td><td style="width: 44.6282%;">```
Bitmap::SharedPointer bitmap = <a class="code" href="http://dev.doc.cgistudio.at/APILINK/class_candera_1_1_bitmap.html#a53c1f585b24819ae815fbeb54820fe23">Bitmap::Create</a>(...);
```

</td></tr><tr><td style="width: 16.9345%;">[BitmapTextureImage](http://dev.doc.cgistudio.at/APILINK/class_candera_1_1_bitmap_texture_image.html "TextureImage encapsulates a VRAM handle which is retrieved when uploading an image to the vram..."), [CubeMapTextureImage](http://dev.doc.cgistudio.at/APILINK/class_candera_1_1_cube_map_texture_image.html "CubeMapTextureImage encapsulates a VRAM handle which is retrieved when uploading a cube mapping textu..."), [BitmapImage2D](http://dev.doc.cgistudio.at/APILINK/class_candera_1_1_bitmap_image2_d.html "Supplies an Image2D interface to a Bitmap.") setters take SharedPointer to [Bitmap](http://dev.doc.cgistudio.at/APILINK/class_candera_1_1_bitmap.html "A 2-dimensional bitmap that can be used as a texture, background or sprite. A bitmap pointing to a va...") and no disposer function</td><td style="width: 38.4373%;">```
BitmapTextureImage textureImage = <a class="code" href="http://dev.doc.cgistudio.at/APILINK/class_candera_1_1_bitmap_texture_image.html#a2370d9c05948c12cb6fa6acec733d565">BitmapTextureImage::Create</a>();
Bitmap bitmap = CANDERA_NEW(Bitmap)(...);
textureImage->SetBitmap(bitmap, 0);
```

</td><td style="width: 44.6282%;">```
BitmapTextureImage textureImage = <a class="code" href="http://dev.doc.cgistudio.at/APILINK/class_candera_1_1_bitmap_texture_image.html#a2370d9c05948c12cb6fa6acec733d565">BitmapTextureImage::Create</a>();
Bitmap::SharedPointer bitmap = <a class="code" href="http://dev.doc.cgistudio.at/APILINK/class_candera_1_1_bitmap.html#a53c1f585b24819ae815fbeb54820fe23">Bitmap::Create</a>(...);
textureImage->SetBitmap(bitmap);
```

</td></tr></tbody></table>

</div></div></div></div></div></div></div>##### Header File Relocations

In CGI Studio 2.x, some functionality had been moved from [Candera](http://dev.doc.cgistudio.at/APILINK/namespace_candera.html "[DataBinding_RefTypeSample]") into FeatStd, keeping redirection macros and header files for backward compatibility. In CGI Studio 3.0.0, redirection code has been removed to a large extent. Following is an overview about removed macros and header files.

##### CanderaPlatform/OS Cleanup

<div class="header" id="bkmrk-removed-use-instead-"><div class="header"><div class="headertitle"><div class="title"><div class="contents"><div class="contents"><div class="textblock"><table border="1" class="doxtable" style="border-collapse: collapse; width: 800px;"><tbody><tr><th>**Removed**</th><th>**Use instead**</th></tr><tr><td>CanderaPlatform/OS/FixedPoint</td><td>FeatStd/Platform/FixedPoint</td></tr><tr><td>CanderaPlatform/OS/FractionNumberMath.h</td><td>FeatStd/Platform/FractionNumberMath.h</td></tr><tr><td>CanderaPlatform/OS/FractionNumber.h</td><td>FeatStd/Platform/FractionNumber.h</td></tr><tr><td>CanderaPlatform/OS/CodePointIterator.h</td><td>FeatStd/Platform/CodePointIterator.h</td></tr></tbody></table>

</div></div></div></div></div></div></div>##### Candera TimePlatform

<div class="header" id="bkmrk-removed-use-instead--0"><div class="header"><div class="headertitle"><div class="title"><div class="contents"><div class="textblock"><table border="1" class="doxtable" style="border-collapse: collapse; width: 800px;"><tbody><tr><th>**Removed**</th><th>**Use instead**</th></tr><tr><td>Candera/Time.h</td><td>CanderaPlatform/OS/TimePlatform.h

</td></tr></tbody></table>

</div></div></div></div></div></div><div class="header" id="bkmrk--1"><div class="headertitle"><div class="title"><div class="contents"><div class="textblock">---

</div></div></div></div></div>#### **Candera/FeatStd Build System Changes**

##### Library Changes

[Candera](http://dev.doc.cgistudio.at/APILINK/namespace_candera.html "[DataBinding_RefTypeSample]") base feature libraries have been joined into the new common library called **Candera.lib**. The following libraries from CGI-Studio V2.x no longer exist separately:

<div class="contents" id="bkmrk-canderaenginebase.li"><div class="contents"><div class="textblock">- CanderaEngineBase.lib
- CanderaEngine2D.lib
- CanderaEngine3D.lib
- CanderaGlobalization.lib
- CanderaSystem.lib
- CanderaOsWin32.lib
- CanderaWidget.lib

</div></div></div>##### CMake Switch Name Modification

The names of almost all CMake switches used in CGI-Studio V2.x have been revised to improve effect and feature association. The feature name now reflects, to which component the feature belongs to.

<p class="callout warning">Please be aware, that even though the CMake Switch names and preprocessor defines from CGI-Studio V2.x still work in CGI-Studio V3.0.0, this backward compatibility is going to be removed with the next release.</p>

##### Candera CMake Switch Changes

<div class="contents" id="bkmrk-for-detailed-informa"><div class="contents"><div class="textblock">- For detailed information on [Candera](http://dev.doc.cgistudio.at/APILINK/namespace_candera.html "[DataBinding_RefTypeSample]") configuration please see <span style="color: rgb(230, 126, 35);">[Application Development &gt; Build System Setup &gt; Building Candera](https://doc316en.candera.eu/link/408#bkmrk-page-title)</span>.
- For [Candera](http://dev.doc.cgistudio.at/APILINK/namespace_candera.html "[DataBinding_RefTypeSample]") compiler defines refer to [Candera Configuration](http://dev.doc.cgistudio.at/APILINK/group___config.html).

<table border="1" class="doxtable" style="border-collapse: collapse; width: 800px;"><tbody><tr><th>**V2.10.0**</th><th>**V3.0.0**</th></tr><tr><td>CGIFEATURE\_ENABLE\_CANDERA\_2D</td><td>CANDERA\_2D\_ENABLED</td></tr><tr><td>CGIFEATURE\_ENABLE\_CANDERA\_3D</td><td>CANDERA\_3D\_ENABLED</td></tr><tr><td>CGIFEATURE\_VRAM\_ALLOCATOR\_CHECK</td><td>CANDERA\_VRAM\_ALLOCATOR\_CHECK\_ENABLED</td></tr><tr><td>CGIFEATURE\_VRAM\_ALLOCATOR\_STATISTICS</td><td>CANDERA\_VRAM\_ALLOCATOR\_STATISTICS\_ENABLED</td></tr><tr><td>CGIFEATURE\_ENABLE\_RENDER\_STATE\_CACHING</td><td>CANDERA\_RENDER\_STATE\_CACHING\_ENABLED</td></tr><tr><td>CGIFEATURE\_ENABLE\_GLOBALIZATION</td><td>CANDERA\_GLOBALIZATION\_ENABLED</td></tr><tr><td>CGIFEATURE\_ENABLE\_ASSET\_DECOMPRESSION</td><td>CANDERA\_ASSET\_DECOMPRESSION\_ENABLED</td></tr><tr><td>CGIFEATURE\_TEXTSHAPER</td><td>CANDERA\_TEXT\_SHAPER</td></tr><tr><td>CGIFEATURE\_ENABLE\_BIDIRECTIONAL\_TEXT</td><td>CANDERA\_BIDIRECTIONAL\_TEXT\_ENABLED</td></tr><tr><td>CGIFEATURE\_ENABLE\_MULTILINE\_TEXT</td><td>CANDERA\_MULTILINE\_TEXT\_ENABLED</td></tr><tr><td>CGIFEATURE\_ENABLE\_VIDEO\_MEMORY\_STATISTIC  
FEATSTD\_ENABLE\_VIDEO\_MEMORY\_STATISTIC</td><td>CANDERA\_VIDEO\_MEMORY\_STATISTIC\_ENABLED</td></tr><tr><td>CGIUNITTEST\_ENABLED</td><td>CANDERA\_UNITTEST\_ENABLED</td></tr><tr><td>CGIUNITTEST\_INCLUDE\_ISOLATED</td><td>CANDERA\_UNITTEST\_INCLUDE\_ISOLATED</td></tr><tr><td>CGIDEVICE\_ENABLE\_4BIT\_GLYPH\_CACHE</td><td>CANDERA\_4BIT\_GLYPH\_CACHE\_ENABLED</td></tr><tr><td>CGIFEATURE\_ENABLE\_LOG</td><td>FEATSTD\_LOG\_ENABLED</td></tr><tr><td>CGIFEATURE\_ENABLE\_MEMORYPOOL</td><td>FEATSTD\_MEMORYPOOL\_ENABLED</td></tr><tr><td>CGIFEATURE\_ENABLE\_TEXTENGINE\_MEMORYPOOL</td><td>CANDERA\_TEXTENGINE\_MEMORYPOOL\_ENABLED</td></tr><tr><td>CGIFEATURE\_ENABLE\_ASSETLOADER\_MEMORYPOOL</td><td>CANDERA\_ASSETLOADER\_MEMORYPOOL\_ENABLED</td></tr><tr><td>CGIFEATURE\_ENABLE\_MEMORY\_STATISTIC</td><td>FEATSTD\_SYSTEM\_MEMORY\_STATISTIC\_ENABLED</td></tr><tr><td>CGIFEATURE\_SYSTEM\_MEMORY\_STATISTIC\_FILE\_AND\_LINE\_TRACKING</td><td>FEATSTD\_SYSTEM\_MEMORY\_STATISTIC\_FILE  
\_AND\_LINE\_TRACKING\_ENABLED</td></tr><tr><td>CGIFEATURE\_FRACTIONAL\_NUMBER\_TYPE</td><td>FEATSTD\_FRACTIONAL\_NUMBER\_TYPE</td></tr><tr><td>CGIFEATURE\_ENABLE\_MONITOR</td><td>FEATSTD\_MONITOR\_ENABLED</td></tr><tr><td>CGISTUDIO\_BUILD\_FREETYPE</td><td>Has been removed, Freetype will be included automatically.</td></tr></tbody></table>

</div></div></div>##### FeatStd CMake Switch Changes

<div class="contents" id="bkmrk-refer-to-the-featstd"><div class="contents"><div class="textblock">- Refer to the <span style="color: rgb(230, 126, 35);">[FeatStd 3.0.0 CMake Changelog](https://doc316en.candera.eu/link/984#bkmrk-page-title)</span> to learn about FeatStd V3.0.0 CMake switch modifications.
- For FeatStd compiler defines refer to [FeatStd Configuration](http://dev.doc.cgistudio.at/APILINK/group___f_e_a_t_s_t_d___c_o_n_f_i_g.html).

</div></div></div><div class="contents" id="bkmrk--2"><div class="textblock">---

</div></div>#### **Regular Expression Search and Replace Patterns**

The following Regular Expression Search &amp; Replace patterns may be used to quickly apply changes to existing source code. They aim at fixing many (breaking) changes introduced with the new version of [Candera](http://dev.doc.cgistudio.at/APILINK/namespace_candera.html "[DataBinding_RefTypeSample]"). However, as simple text replacement with regular expressions is used, corrections which resulted from applying these patterns may be incorrect in some situations. Therefore, the patterns are just provided as-is in the hope that they may be useful for code migration.

To apply the patterns Notepad++ or any other compatible Regular Expression Search &amp; Replace tool can be used. When using Notepad++ please make sure to select the search method "Regular expression" and check "Match case".

##### Patterns for Fixing Breaking Changes

<div class="contents" id="bkmrk-use-case-search-patt"><div class="contents"><div class="textblock"><table border="1" class="doxtable" style="border-collapse: collapse; width: 800px; border-width: 1px;"><tbody><tr><th style="width: 22.7392%; border-width: 1px;">**Use case**</th><th style="width: 39.5599%; border-width: 1px;">**Search pattern**</th><th style="width: 37.7009%; border-width: 1px;">**Replace pattern**</th></tr><tr><td style="width: 22.7392%; border-width: 1px;">Declarations of AnimationPlayer pointer</td><td style="width: 39.5599%; border-width: 1px;">(\\\\S\*)SharedPointer&lt;AnimationPlayer&gt;</td><td style="width: 37.7009%; border-width: 1px;">AnimationPlayer::SharedPointer</td></tr><tr><td style="width: 22.7392%; border-width: 1px;">Declarations of AnimationGroupPlayer pointer</td><td style="width: 39.5599%; border-width: 1px;">(\\\\S\*)SharedPointer&lt;AnimationGroupPlayer&gt;</td><td style="width: 37.7009%; border-width: 1px;">AnimationGroupPlayer::SharedPointer</td></tr><tr><td style="width: 22.7392%; border-width: 1px;">Declarations of AnimationTimeDispatcher pointer variables</td><td style="width: 39.5599%; border-width: 1px;">((\\\\W)|(const\\\\s+))(Candera::)?AnimationTimeDispatcher((\\\\s\*)\\\\\*)(\\\\s\*?\[\\\\w:\]+)(\\\\s\*?=\\\\s\*?(NULL|0))?</td><td style="width: 37.7009%; border-width: 1px;">$2$4AnimationTimeDispatcher::SharedPointer$6$7</td></tr><tr><td style="width: 22.7392%; border-width: 1px;">Declarations of AnimationController pointer variables</td><td style="width: 39.5599%; border-width: 1px;">((\\\\W)|(const\\\\s+))(Candera::)?AnimationController((\\\\s\*)\\\\\*)(\\\\s\*?\[\\\\w:\]+)(\\\\s\*?=\\\\s\*?(NULL|0))?</td><td style="width: 37.7009%; border-width: 1px;">$2$4AnimationController::SharedPointer$6$7</td></tr><tr><td style="width: 22.7392%; border-width: 1px;">Declarations of InterpolationStrategy pointer variables</td><td style="width: 39.5599%; border-width: 1px;">((\\\\W)|(const\\\\s+))(Candera::)?InterpolationStrategy ((\\\\s\*)\\\\\*)(\\\\s\*?\[\\\\w:\]+)(\\\\s\*?=\\\\s\*?(NULL|0))?</td><td style="width: 37.7009%; border-width: 1px;">$2$4InterpolationStrategy::SharedPointer$6$7</td></tr><tr><td style="width: 22.7392%; border-width: 1px;">Calls to AnimationKeyframeSequence::SetInterpolationStrategy()</td><td style="width: 39.5599%; border-width: 1px;">SetInterpolationStrategy\\\\(\\\\s\*?&amp;?\\\\s\*?(\[\\\\w:\\\\(\\\\)\]+),.\*?\\\\)</td><td style="width: 37.7009%; border-width: 1px;">SetInterpolationStrategy \\\\($1\\\\)</td></tr><tr><td style="width: 22.7392%; border-width: 1px;">Calls to AnimationPlayer::SetController()</td><td style="width: 39.5599%; border-width: 1px;">SetController\\\\(\\\\s\*?&amp;?\\\\s\*?(\[\\\\w:\\\\(\\\\)\]+),.\*?\\\\)</td><td style="width: 37.7009%; border-width: 1px;">SetController\\\\($1\\\\)</td></tr><tr><td style="width: 22.7392%; border-width: 1px;">Declarations of Animation PropertySetter pointer variables</td><td style="width: 39.5599%; border-width: 1px;">((\\\\W)|(const\\\\s+))(Candera::)?(\\\\w\*)PropertySetter((\\\\s\*)\\\\\*?)(\\\\s\*?\\\\w+)(\\\\s\*?=\\\\s\*?(NULL|0))?</td><td style="width: 37.7009%; border-width: 1px;">$2$4$5PropertySetter::SharedPointer$7$8</td></tr><tr><td style="width: 22.7392%; border-width: 1px;">Creation of Animation PropertySetter objects</td><td style="width: 39.5599%; border-width: 1px;">(CANDERA\_NEW|FEATSTD\_NEW)(\\\\s\*?\\\\(\\\\s\*?)(Candera::)?(\[\\\\w:\]\*)PropertySetter(\\\\s\*\\\\))</td><td style="width: 37.7009%; border-width: 1px;">$3$4PropertySetter::Create\\\\(\\\\)</td></tr><tr><td style="width: 22.7392%; border-width: 1px;">Calls to AnimationBlendedProperty::SetAnimationPropertySetter()</td><td style="width: 39.5599%; border-width: 1px;">SetAnimationPropertySetter\\\\(\\\\s\*?&amp;?\\\\s\*?(\[\\\\w:\\\\(\\\\)\]+)\\\\)</td><td style="width: 37.7009%; border-width: 1px;">SetAnimationPropertySetter\\\\($1\\\\)</td></tr><tr><td style="width: 22.7392%; border-width: 1px;">Forward declarations of classes for pointer declarations which are now SharedPointer instances</td><td style="width: 39.5599%; border-width: 1px;">(namespace Candera.\*\\\\{.\*)(\[\\\\r\\\\n\\\\s\\\\w;\]\*)(class AnimationController;.\*\[\\\\r\\\\n\])</td><td style="width: 37.7009%; border-width: 1px;">\#include &lt;Candera/EngineBase/Animation/AnimationController.h&gt;\\\\n\\\\n$1</td></tr><tr><td style="width: 22.7392%; border-width: 1px;">Forward declarations of classes for pointer declarations which are now SharedPointer instances</td><td style="width: 39.5599%; border-width: 1px;">(namespace Candera.\*\\\\{.\*)(\[\\\\r\\\\n\\\\s\\\\w;\]\*)(class AnimationTimeDispatcher;.\*\[\\\\r\\\\n\])</td><td style="width: 37.7009%; border-width: 1px;">\#include &lt;Candera/EngineBase/Animation/AnimationTimeDispatcher.h&gt;\\\\n\\\\n$1</td></tr><tr><td style="width: 22.7392%; border-width: 1px;">Declarations of Bitmap pointer variables</td><td style="width: 39.5599%; border-width: 1px;">((\\\\W)|(const\\\\s+))(Candera::)?Bitmap((\\\\s\*)\\\\\*)(\\\\s\*?\\\\w+)(\\\\s\*?=\\\\s\*?(NULL|0))?</td><td style="width: 37.7009%; border-width: 1px;">$2$4Bitmap::SharedPointer$6$7</td></tr><tr><td style="width: 22.7392%; border-width: 1px;">Forward declarations of classes for pointer declarations which are now SharedPointer instances.</td><td style="width: 39.5599%; border-width: 1px;">(namespace Candera.\*\\\\{.\*)(\[\\\\r\\\\n\\\\s\\\\w;\]\*)(class Bitmap;.\*\[\\\\r\\\\n\])</td><td style="width: 37.7009%; border-width: 1px;">\#include &lt;Candera/EngineBase/Common/Bitmap.h&gt;\\\\n\\\\n$1</td></tr><tr><td style="width: 22.7392%; border-width: 1px;">Calls to e.g. BitmapImage2D::SetBitmap()</td><td style="width: 39.5599%; border-width: 1px;">SetBitmap\\\\(\\\\s\*?&amp;?\\\\s\*?(\[\\\\w:\\\\(\\\\)\]+),.\*?\\\\)</td><td style="width: 37.7009%; border-width: 1px;">SetBitmap\\\\($1\\\\)</td></tr><tr><td style="width: 22.7392%; border-width: 1px;">Calls to CubeMapTextureImage::SetBitmapFace()</td><td style="width: 39.5599%; border-width: 1px;">SetBitmapFace\\\\(\\\\s\*?&amp;?\\\\s\*?(\[\\\\w:\\\\(\\\\)\]+),(.\*?),.\*?\\\\)</td><td style="width: 37.7009%; border-width: 1px;">SetBitmapFace\\\\($1,$2\\\\)</td></tr><tr><td style="width: 22.7392%; border-width: 1px;">Use CanderaPlatform/OS/TimePlatform.h instead of Candera/Time.h</td><td style="width: 39.5599%; border-width: 1px;">(#include &lt;Candera\\\\/Time\\\\.h&gt;)</td><td style="width: 37.7009%; border-width: 1px;">\#include &lt;CanderaPlatform\\\\/OS\\\\/TimePlatform\\\\.h&gt;</td></tr><tr><td style="width: 22.7392%; border-width: 1px;">Use CanderaPlatform/OS/TimePlatform.h instead of Candera/Time.h</td><td style="width: 39.5599%; border-width: 1px;">(\[\\\\s=\\\\n\\\\(&lt;\])Time::</td><td style="width: 37.7009%; border-width: 1px;">$1TimePlatform::</td></tr><tr><td style="width: 22.7392%; border-width: 1px;">Use headers in FeatStd, that were previously located in CanderaPlatform/OS</td><td style="width: 39.5599%; border-width: 1px;">\#include &lt;CanderaPlatform\\\\/OS\\\\/Diagnostics\\\\/(FixedPoint(.\*)|FractionNumberMath.h|FractionNumber.h|CodePointIterator.h)&gt;  
</td><td style="width: 37.7009%; border-width: 1px;">\#include &lt;FeatStd\\\\/Platform\\\\/$1.h&gt;</td></tr></tbody></table>

</div></div></div>##### Patterns for fixing backward compatible changes

<div class="contents" id="bkmrk-use-case-search-patt-0"><div class="contents"><div class="textblock"><table border="1" class="doxtable" style="border-collapse: collapse; width: 800px; border-width: 1px;"><tbody><tr><th style="width: 167.703px; border-width: 1px;">**Use case**</th><th style="width: 374.938px; border-width: 1px;">**Search pattern**</th><th style="width: 256.359px; border-width: 1px;">**Replace pattern**</th></tr><tr><td style="width: 167.703px; border-width: 1px;">Usage of EaseFunction qualifier</td><td style="width: 374.938px; border-width: 1px;">(\[^(\\\\w|(Animation::)|\\\\/|(enum )|(class ))\]|\\\\(|(Candera::)|\\\\s)((Back|Bounce|Elastic|Power|Exponential)EaseFunction)</td><td style="width: 256.359px; border-width: 1px;">$1Animation::$3</td></tr><tr><td style="width: 167.703px; border-width: 1px;">Usage of InterpolationStrategy qualifier</td><td style="width: 374.938px; border-width: 1px;">(\[^(\\\\w|(Animation::)|\\\\/|(enum )|(class ))\]|\\\\(|(Candera::)|\\\\s)((Bezier|Ease|Linear|Spline|Step)?InterpolationStrategy)</td><td style="width: 256.359px; border-width: 1px;">$1Animation::$3</td></tr><tr><td style="width: 167.703px; border-width: 1px;">Usage of Animation core classes qualifier</td><td style="width: 374.938px; border-width: 1px;">(\[^(\\\\w|(Animation::)|\\\\/|(enum )|(class ))\]|\\\\(|(Candera::)|SharedPointer&lt;|\\\\s)(Animation(BlendedProperty|Controller|GroupPlayer|KeyframeSequence|Player|PlayerBase|PlayerListener|PropertySetter|TimeDispatcher|TimeType))(\\\\W)</td><td style="width: 256.359px; border-width: 1px;">$1Animation::$3$5</td></tr><tr><td style="width: 167.703px; border-width: 1px;">Usage of Animation core classes qualifier</td><td style="width: 374.938px; border-width: 1px;">(\[^(\\\\w|(Animation::)|\\\\/|(enum )|(class ))\]|\\\\(|(Candera::)|\\\\s)(AbstractEasingFunction|CameraGroupAnimationPropertySetter|KeyframeSequence|SequenceTimeType)</td><td style="width: 256.359px; border-width: 1px;">$1Animation::$3</td></tr><tr><td style="width: 167.703px; border-width: 1px;">New namespace CgiWidgetLibrary</td><td style="width: 374.938px; border-width: 1px;">public\\\\s+(Listener)\\\\s\*?&lt;</td><td style="width: 256.359px; border-width: 1px;">public CgiWidgetLibrary::$1&lt;</td></tr><tr><td style="width: 167.703px; border-width: 1px;">Removed indirection from Candera to FeatStd for Logging</td><td style="width: 374.938px; border-width: 1px;">CANDERA\_DEBUG\_(\\\\w\*)\\\\(</td><td style="width: 256.359px; border-width: 1px;">FEATSTD\_DEBUG\_$1\\\\(</td></tr><tr><td style="width: 167.703px; border-width: 1px;">Removed indirection from Candera to FeatStd for Logging</td><td style="width: 374.938px; border-width: 1px;">CANDERA\_LOG(\\\\w\*)\\\\(</td><td style="width: 256.359px; border-width: 1px;">FEATSTD\_LOG$1\\\\(</td></tr><tr><td style="width: 167.703px; border-width: 1px;">Removed indirection from Candera to FeatStd for Logging</td><td style="width: 374.938px; border-width: 1px;">(\[^:\\\\/\\\\w\]|\\\\s)(Log(Control|Level))</td><td style="width: 256.359px; border-width: 1px;">$1FeatStd::Diagnostics::$2</td></tr><tr><td style="width: 167.703px; border-width: 1px;">Removed indirection from Candera to FeatStd</td><td style="width: 374.938px; border-width: 1px;">CANDERA\_PANIC(\\\\w\*)\\\\(</td><td style="width: 256.359px; border-width: 1px;">FEATSTD\_PANIC$1\\\\(</td></tr><tr><td style="width: 167.703px; border-width: 1px;">Removed indirection from Candera to FeatStd</td><td style="width: 374.938px; border-width: 1px;">CANDERA\_COMPILETIME\_ASSERT</td><td style="width: 256.359px; border-width: 1px;">FEATSTD\_COMPILETIME\_ASSERT</td></tr><tr><td style="width: 167.703px; border-width: 1px;">Removed indirection from Candera to FeatStd</td><td style="width: 374.938px; border-width: 1px;">CANDERA\_UNUSED\_PARAMETER</td><td style="width: 256.359px; border-width: 1px;">FEATSTD\_UNUSED</td></tr><tr><td style="width: 167.703px; border-width: 1px;">Removed indirection from Candera to FeatStd</td><td style="width: 374.938px; border-width: 1px;">\#include &lt;Candera\\\\/Systems\\\\/Diagnostics\\\\/(Appender|CharBuffer|ConsoleAppender|Debug|DebuggerOutSystemmemoryStatistic|ErrorHandling|FileAppender|LocationInfo|Measurable|SystemMemoryStatistic|Log(ger(Typed)?|Event|Level|))(.h|Control.h)&gt;</td><td style="width: 256.359px; border-width: 1px;">\#include &lt;FeatStd\\\\/Diagnostics\\\\/$1.h&gt;</td></tr><tr><td style="width: 167.703px; border-width: 1px;">Removed indirection from Candera to FeatStd</td><td style="width: 374.938px; border-width: 1px;">\#include &lt;FeatStd\\\\/Diagnostics\\\\/LogRealm.h&gt;</td><td style="width: 256.359px; border-width: 1px;">\#include &lt;FeatStd\\\\/Diagnostics\\\\/Log.h&gt;</td></tr></tbody></table>

</div></div></div><div class="contents" id="bkmrk--3"><div class="textblock">  
</div></div>---

<div class="header" id="bkmrk--5"><div class="headertitle"><div class="title">  
</div></div></div>