Skip to main content

Candera V3.0.0 Migration Guide

Following a guide how to uprade application code from V2.10.0 to V3.0.0 Candera Interfaces.

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

Regular Expression Search and Replace Patterns


Migration Guide for Backward Compatible Interface Changes

This page provides an overview about interface changes between Candera V2.10.0 and Candera 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.

Description Candera V2.10.0 Candera V3.0.0
TextAlignment TextAlignment
Leading
Middle
Trailing
HorizontalAlignment
HLeft
HCenter
HRight
VerticalAlignment
VTop
VCenter
VBottom
Effect shared pointer types

[Effect]Ptr

e.g.

BitmapBrushPtr

[Effect]SharedPointer

e.g.

BitmapBrush::SharedPointer


const TreeTraverser
class MyTraverser : public TreeTraverserBase<Node> {
    protected:
        virtual TraverserAction ProcessConstNode(const Node& node)
        {
        ...
        }
};
class MyTraverser : public TreeTraverserBase<const Node> {
    protected:
        virtual TraverserAction ProcessNode(const Node& node)
        {
        ...
        }
};
AssetDescriptor
Candera::DefaultAssetProvider* provider = m_assetProvider;
Candera::AssetContext* assetContext = provider->GetAssetContext();
if (assetContext != 0) {
    for (Int i = 0; i < assetContext->GetAnimationCount(); i++) {
        const Candera::Char* animation = assetContext->GetAnimationName(i);
        //Use animation name
    }
}
Candera::DefaultAssetProvider* provider = m_assetProvider;
for (Candera::AssetDescriptor::AssetIdIterator animationIdIterator =  
        provider->GetAssetDescriptor().GetAssetIdIterator(AnimationLib);
        animationIdIterator.IsValid(); ++animationIdIterator) {
    //use animation AssetId: *animationIdIterator
    //or use animation name: provider->GetNameById(AnimationLib, *animationIdIterator, 0)}
AssetId
Bitmap::SharedPointer bitmap= Base::GetAssetProvider()->GetBitmap("MyModule#Imports#Models#myBmp");
Assign a Symbol Name "myBmp" to the Bitmap Asset and export headers in SceneComposer as "MyAssets.h".
#include "MyAssets.h"
Bitmap::SharedPointer bitmap = Base::GetAssetProvider()->GetBitmapById(CgiAssetNames::myBmp);
Animation namespace
Candera::InterpolationStrategy* interpolationStrategy =
       Candera::LinearInterpolationStrategy::Create();
Animation::InterpolationStrategy::SharedPointer interpolationStrategy =
       Animation::LinearInterpolationStrategy::Create();
New namespace CgiWidgetLibrary no namespace required
using namespace CgiWidgetLibrary;
3D Shallow cloning with flat traversing
Node* clone = node->Clone();
or
Node* clone = node->Clone(Node::Flat);
Node* clone = node->Clone();
3D Shallow cloning with deep traversing
Node* clone = node->Clone(Node::Deep);
Node* clone = TreeCloner().CreateClone(*node);
2D Shallow cloning with flat traversing
Node2D* clone = node->Clone();
or
Node2D* clone = node->Clone(Node2D::Flat);
or
Node2D* clone = node->Clone(TraverseFlat, CloneShallow);
Node2D* clone = node->Clone();


Bitmap type/format changes
UInt8* pixels = GetBitmapDataFromArbitrarySource(); //exemplary
Bitmap* bitmap = &Bitmap(128, 128, 
    Bitmap::RgbaFormat, Bitmap::UnsignedByteType,
    Bitmap::PackAlignment1, pixels, 0,
    true, true);
UInt8* pixels = GetBitmapDataFromArbitrarySource(); //exemplary
Bitmap* bitmap = &Bitmap(128, 128, 
    Bitmap::RgbaUnsignedBytePixelFormat,
    Bitmap::PackAlignment1, pixels, 0,0,
    true, true);


GetBoudingRectangle with ExcludeFinalAdvance, ActualTransversalSize
bound = textRenderer.GetBoudingRectangle(layoutingOptions, shapingOptions, textProperties,
                        MeasuringOptions(ExcludeFinalAdvance, ActualTransversalSize));
GlyphTextMeasureContext context;
textRenderer.Render(context, layoutingOptions, shapingOptions, textProperties);
bound = context.GetTextRectangle();


GetBoudingRectangle with IncludeFinalAdvance, ActualTransversalSize
bound = textRenderer.GetBoudingRectangle(layoutingOptions, shapingOptions, textProperties,
                        MeasuringOptions(IncludeFinalAdvance, ActualTransversalSize));
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(),
    Math::Maximum(
        cursorBound.GetWidth() - glyphBound.GetLeft(),
        glyphBound.GetWidth()),
    glyphBound.GetHeight());


GetBoudingRectangle with ExcludeFinalAdvance, ContantTransversalSize
bound = textRenderer.GetBoudingRectangle(layoutingOptions, shapingOptions, textProperties, 
                        MeasuringOptions(IncludeFinalAdvance, ContantTransversalSize));
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());


GetBoudingRectangle with IncludeFinalAdvance, ContantTransversalSize
bound = textRenderer.GetBoudingRectangle(layoutingOptions, shapingOptions, textProperties, 
                        MeasuringOptions(IncludeFinalAdvance, ContantTransversalSize));
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(),
    Math::Maximum(
        cursorBound.GetWidth() - glyphBound.GetLeft(),
        glyphBound.GetWidth()),
    cursorBound.GetHeight());


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.

Description Candera V2.10.0

Candera V3.0.0

3D Deep cloning with flat traversing No previous support.
Node* clone = node->Clone();
DeepNodeCloneStrategy cloneStrategy;
DeepNodeCloneStrategy::Pair pair(node, clone);
cloneStrategy.Execute(pair, pair);
3D Deep cloning with deep traversing No previous support.
Node* clone = DeepTreeCloner().CreateClone(*node);
or
TreeCloner treeCloner;
DeepNodeCloneStrategy cloneStrategy;
treeCloner.SetNodeCloneStrategy(&cloneStrategy);
Node* clone = treeCloner.CreateClone(*node);
Header File Relocations

In CGI Studio 2.x, some functionality had been moved from Candera 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

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.

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.

Deprecated Use instead
Candera/System/Diagnostics/Appender.h FeatStd/Diagnostics/Appender.h
Candera/System/Diagnostics/CharBuffer.h FeatStd/Diagnostics/CharBuffer.h
Candera/System/Diagnostics/ConsoleAppender.h FeatStd/Diagnostics/ConsoleAppender.h
Candera/System/Diagnostics/Debug.h FeatStd/Diagnostics/Debug.h
Candera/System/Diagnostics/DebuggerOutSystemMemoryStatistic.h FeatStd/Diagnostics/DebuggerOutSystemMemoryStatistic.h
Candera/System/Diagnostics/ErrorHandling.h FeatStd/Diagnostics/ErrorHandling.h
Candera/System/Diagnostics/FileAppender.h FeatStd/Diagnostics/FileAppender.h
Candera/System/Diagnostics/LocationInfo.h FeatStd/Diagnostics/LocationInfo.h
Candera/System/Diagnostics/LogControl.h FeatStd/Diagnostics/Log.h
Candera/System/Diagnostics/LogEvent.h FeatStd/Diagnostics/LogEvent.h
Candera/System/Diagnostics/Logger.h FeatStd/Diagnostics/Logger.h
Candera/System/Diagnostics/LoggerTyped.h FeatStd/Diagnostics/LoggerTyped.h
Candera/System/Diagnostics/LogLevel.h FeatStd/Diagnostics/LogLevel.h
Candera/System/Diagnostics/Measurable.h FeatStd/Diagnostics/Measurable.h
Candera/System/Diagnostics/SystemMemoryStatistic.h FeatStd/Diagnostics/SystemMemoryStatistic.h

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.

Deprecated Use instead
CANDERA_DEBUG_BREAK FEATSTD_DEBUG_BREAK
CANDERA_DEBUG_ASSERT FEATSTD_DEBUG_ASSERT
CANDERA_DEBUG_FAIL FEATSTD_DEBUG_FAIL
CANDERA_DEBUG_REENTRANCE_GUARD FEATSTD_DEBUG_REENTRANCE_GUARD
CANDERA_COMPILETIME_ASSERT FEATSTD_COMPILETIME_ASSERT
CANDERA_UNUSED_PARAMETER FEATSTD_UNUSED
CANDERA_PANIC FEATSTD_PANIC
CANDERA_PANIC_IF FEATSTD_PANIC_IF
CANDERA_LOG_FUNC FEATSTD_LOG_FUNC
CANDERA_LOG_LOCATION FEATSTD_LOG_LOCATION
CANDERA_LOG_SET_REALM FEATSTD_LOG_SET_REALM
CANDERA_LOG_DEBUG FEATSTD_LOG_DEBUG
CANDERA_LOG_INFO FEATSTD_LOG_INFO
CANDERA_LOG_WARN FEATSTD_LOG_WARN
CANDERA_LOG_ERROR FEATSTD_LOG_ERROR
CANDERA_LOG_FATAL FEATSTD_LOG_FATAL
CANDERA_LOG_REALM FEATSTD_LOG_REALM
CANDERA_LOG FEATSTD_LOG

Migration Guide for Breaking Interface Changes

These changes are incompatible with earlier versions of Candera and will require immediate adaptation of existing code.

Interface Changes without Deprecations
Description Candera V2.10.0 Candera V3.0.0
Shared pointers in animation framework
AnimationController* animController = AnimationController::Create();
AnimationTimeDispatcher* animDispatcher = AnimationTimeDispatcher::Create();
InterpolationStrategy* interpolationStrategy = SplineInterpolationStrategy::Create();
BackEaseFunction backEase;
AnimationController::SharedPointer animController = AnimationController::Create();
AnimationTimeDispatcher::SharedPointer animDispatcher = AnimationTimeDispatcher::Create();
InterpolationStrategy::SharedPointer interpolationStrategy = SplineInterpolationStrategy::Create();
BackEaseFunction::SharedPointer backEase = BackEaseFunction::Create();


Shared pointers and Create methods for animation property setters instead of constructors e.g.
Candera::Transformable2DTranslateYPropertySetter transitionPS();
Candera::MaterialPropertySetter materialPS();

e.g.

Candera::Transformable2DTranslateYPropertySetter::SharedPointer transitionPS = Transformable2DTranslateYPropertySetter::Create();
Candera::MaterialPropertySetter::SharedPointer materialPS = MaterialPropertySetter::Create();


Shared pointer destruction
Bitmap* bmp = CANDERA_NEW(...);
CANDERA_DELETE(bmp);
bmp = 0;

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 = Bitmap::Create(...);
// no manual destruction
// no need to set to zero / NULL


Bitmap as SharedPointer
Bitmap bitmap(...);
Bitmap::SharedPointer bitmap = Bitmap::Create(...);
BitmapTextureImage, CubeMapTextureImage, BitmapImage2D setters take SharedPointer to Bitmap and no disposer function
BitmapTextureImage textureImage = BitmapTextureImage::Create();
Bitmap bitmap = CANDERA_NEW(Bitmap)(...);
textureImage->SetBitmap(bitmap, 0);
BitmapTextureImage textureImage = BitmapTextureImage::Create();
Bitmap::SharedPointer bitmap = Bitmap::Create(...);
textureImage->SetBitmap(bitmap);


Header File Relocations

In CGI Studio 2.x, some functionality had been moved from Candera 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
Removed Use instead
CanderaPlatform/OS/FixedPoint FeatStd/Platform/FixedPoint
CanderaPlatform/OS/FractionNumberMath.h FeatStd/Platform/FractionNumberMath.h
CanderaPlatform/OS/FractionNumber.h FeatStd/Platform/FractionNumber.h
CanderaPlatform/OS/CodePointIterator.h FeatStd/Platform/CodePointIterator.h
Candera TimePlatform
Removed Use instead
Candera/Time.h

CanderaPlatform/OS/TimePlatform.h



Candera/FeatStd Build System Changes

Library Changes

Candera 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:

  • CanderaEngineBase.lib
  • CanderaEngine2D.lib
  • CanderaEngine3D.lib
  • CanderaGlobalization.lib
  • CanderaSystem.lib
  • CanderaOsWin32.lib
  • CanderaWidget.lib
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.

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.

Candera CMake Switch Changes
V2.10.0 V3.0.0
CGIFEATURE_ENABLE_CANDERA_2D CANDERA_2D_ENABLED
CGIFEATURE_ENABLE_CANDERA_3D CANDERA_3D_ENABLED
CGIFEATURE_VRAM_ALLOCATOR_CHECK CANDERA_VRAM_ALLOCATOR_CHECK_ENABLED
CGIFEATURE_VRAM_ALLOCATOR_STATISTICS CANDERA_VRAM_ALLOCATOR_STATISTICS_ENABLED
CGIFEATURE_ENABLE_RENDER_STATE_CACHING CANDERA_RENDER_STATE_CACHING_ENABLED
CGIFEATURE_ENABLE_GLOBALIZATION CANDERA_GLOBALIZATION_ENABLED
CGIFEATURE_ENABLE_ASSET_DECOMPRESSION CANDERA_ASSET_DECOMPRESSION_ENABLED
CGIFEATURE_TEXTSHAPER CANDERA_TEXT_SHAPER
CGIFEATURE_ENABLE_BIDIRECTIONAL_TEXT CANDERA_BIDIRECTIONAL_TEXT_ENABLED
CGIFEATURE_ENABLE_MULTILINE_TEXT CANDERA_MULTILINE_TEXT_ENABLED
CGIFEATURE_ENABLE_VIDEO_MEMORY_STATISTIC
FEATSTD_ENABLE_VIDEO_MEMORY_STATISTIC
CANDERA_VIDEO_MEMORY_STATISTIC_ENABLED
CGIUNITTEST_ENABLED CANDERA_UNITTEST_ENABLED
CGIUNITTEST_INCLUDE_ISOLATED CANDERA_UNITTEST_INCLUDE_ISOLATED
CGIDEVICE_ENABLE_4BIT_GLYPH_CACHE CANDERA_4BIT_GLYPH_CACHE_ENABLED
CGIFEATURE_ENABLE_LOG FEATSTD_LOG_ENABLED
CGIFEATURE_ENABLE_MEMORYPOOL FEATSTD_MEMORYPOOL_ENABLED
CGIFEATURE_ENABLE_TEXTENGINE_MEMORYPOOL CANDERA_TEXTENGINE_MEMORYPOOL_ENABLED
CGIFEATURE_ENABLE_ASSETLOADER_MEMORYPOOL CANDERA_ASSETLOADER_MEMORYPOOL_ENABLED
CGIFEATURE_ENABLE_MEMORY_STATISTIC FEATSTD_SYSTEM_MEMORY_STATISTIC_ENABLED
CGIFEATURE_SYSTEM_MEMORY_STATISTIC_FILE_AND_LINE_TRACKING FEATSTD_SYSTEM_MEMORY_STATISTIC_FILE
_AND_LINE_TRACKING_ENABLED
CGIFEATURE_FRACTIONAL_NUMBER_TYPE FEATSTD_FRACTIONAL_NUMBER_TYPE
CGIFEATURE_ENABLE_MONITOR FEATSTD_MONITOR_ENABLED
CGISTUDIO_BUILD_FREETYPE Has been removed, Freetype will be included automatically.
FeatStd CMake Switch Changes

Regular Expression Search and Replace Patterns

The following Regular Expression Search & 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. 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 & 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
Use case Search pattern Replace pattern
Declarations of AnimationPlayer pointer (\\S*)SharedPointer<AnimationPlayer> AnimationPlayer::SharedPointer
Declarations of AnimationGroupPlayer pointer (\\S*)SharedPointer<AnimationGroupPlayer> AnimationGroupPlayer::SharedPointer
Declarations of AnimationTimeDispatcher pointer variables ((\\W)|(const\\s+))(Candera::)?AnimationTimeDispatcher((\\s*)\\*)(\\s*?[\\w:]+)(\\s*?=\\s*?(NULL|0))? $2$4AnimationTimeDispatcher::SharedPointer$6$7
Declarations of AnimationController pointer variables ((\\W)|(const\\s+))(Candera::)?AnimationController((\\s*)\\*)(\\s*?[\\w:]+)(\\s*?=\\s*?(NULL|0))? $2$4AnimationController::SharedPointer$6$7
Declarations of InterpolationStrategy pointer variables ((\\W)|(const\\s+))(Candera::)?InterpolationStrategy ((\\s*)\\*)(\\s*?[\\w:]+)(\\s*?=\\s*?(NULL|0))? $2$4InterpolationStrategy::SharedPointer$6$7
Calls to AnimationKeyframeSequence::SetInterpolationStrategy() SetInterpolationStrategy\\(\\s*?&?\\s*?([\\w:\\(\\)]+),.*?\\) SetInterpolationStrategy \\($1\\)
Calls to AnimationPlayer::SetController() SetController\\(\\s*?&?\\s*?([\\w:\\(\\)]+),.*?\\) SetController\\($1\\)
Declarations of Animation PropertySetter pointer variables ((\\W)|(const\\s+))(Candera::)?(\\w*)PropertySetter((\\s*)\\*?)(\\s*?\\w+)(\\s*?=\\s*?(NULL|0))? $2$4$5PropertySetter::SharedPointer$7$8
Creation of Animation PropertySetter objects (CANDERA_NEW|FEATSTD_NEW)(\\s*?\\(\\s*?)(Candera::)?([\\w:]*)PropertySetter(\\s*\\)) $3$4PropertySetter::Create\\(\\)
Calls to AnimationBlendedProperty::SetAnimationPropertySetter() SetAnimationPropertySetter\\(\\s*?&?\\s*?([\\w:\\(\\)]+)\\) SetAnimationPropertySetter\\($1\\)
Forward declarations of classes for pointer declarations which are now SharedPointer instances (namespace Candera.*\\{.*)([\\r\\n\\s\\w;]*)(class AnimationController;.*[\\r\\n]) #include <Candera/EngineBase/Animation/AnimationController.h>\\n\\n$1
Forward declarations of classes for pointer declarations which are now SharedPointer instances (namespace Candera.*\\{.*)([\\r\\n\\s\\w;]*)(class AnimationTimeDispatcher;.*[\\r\\n]) #include <Candera/EngineBase/Animation/AnimationTimeDispatcher.h>\\n\\n$1
Declarations of Bitmap pointer variables ((\\W)|(const\\s+))(Candera::)?Bitmap((\\s*)\\*)(\\s*?\\w+)(\\s*?=\\s*?(NULL|0))? $2$4Bitmap::SharedPointer$6$7
Forward declarations of classes for pointer declarations which are now SharedPointer instances. (namespace Candera.*\\{.*)([\\r\\n\\s\\w;]*)(class Bitmap;.*[\\r\\n]) #include <Candera/EngineBase/Common/Bitmap.h>\\n\\n$1
Calls to e.g. BitmapImage2D::SetBitmap() SetBitmap\\(\\s*?&?\\s*?([\\w:\\(\\)]+),.*?\\) SetBitmap\\($1\\)
Calls to CubeMapTextureImage::SetBitmapFace() SetBitmapFace\\(\\s*?&?\\s*?([\\w:\\(\\)]+),(.*?),.*?\\) SetBitmapFace\\($1,$2\\)
Use CanderaPlatform/OS/TimePlatform.h instead of Candera/Time.h (#include <Candera\\/Time\\.h>) #include <CanderaPlatform\\/OS\\/TimePlatform\\.h>
Use CanderaPlatform/OS/TimePlatform.h instead of Candera/Time.h ([\\s=\\n\\(<])Time:: $1TimePlatform::
Use headers in FeatStd, that were previously located in CanderaPlatform/OS #include <CanderaPlatform\\/OS\\/Diagnostics\\/(FixedPoint(.*)|FractionNumberMath.h|FractionNumber.h|CodePointIterator.h)>
#include <FeatStd\\/Platform\\/$1.h>
Patterns for fixing backward compatible changes
Use case Search pattern Replace pattern
Usage of EaseFunction qualifier ([^(\\w|(Animation::)|\\/|(enum )|(class ))]|\\(|(Candera::)|\\s)((Back|Bounce|Elastic|Power|Exponential)EaseFunction) $1Animation::$3
Usage of InterpolationStrategy qualifier ([^(\\w|(Animation::)|\\/|(enum )|(class ))]|\\(|(Candera::)|\\s)((Bezier|Ease|Linear|Spline|Step)?InterpolationStrategy) $1Animation::$3
Usage of Animation core classes qualifier ([^(\\w|(Animation::)|\\/|(enum )|(class ))]|\\(|(Candera::)|SharedPointer<|\\s)(Animation(BlendedProperty|Controller|GroupPlayer|KeyframeSequence|Player|PlayerBase|PlayerListener|PropertySetter|TimeDispatcher|TimeType))(\\W) $1Animation::$3$5
Usage of Animation core classes qualifier ([^(\\w|(Animation::)|\\/|(enum )|(class ))]|\\(|(Candera::)|\\s)(AbstractEasingFunction|CameraGroupAnimationPropertySetter|KeyframeSequence|SequenceTimeType) $1Animation::$3
New namespace CgiWidgetLibrary public\\s+(Listener)\\s*?< public CgiWidgetLibrary::$1<
Removed indirection from Candera to FeatStd for Logging CANDERA_DEBUG_(\\w*)\\( FEATSTD_DEBUG_$1\\(
Removed indirection from Candera to FeatStd for Logging CANDERA_LOG(\\w*)\\( FEATSTD_LOG$1\\(
Removed indirection from Candera to FeatStd for Logging ([^:\\/\\w]|\\s)(Log(Control|Level)) $1FeatStd::Diagnostics::$2
Removed indirection from Candera to FeatStd CANDERA_PANIC(\\w*)\\( FEATSTD_PANIC$1\\(
Removed indirection from Candera to FeatStd CANDERA_COMPILETIME_ASSERT FEATSTD_COMPILETIME_ASSERT
Removed indirection from Candera to FeatStd CANDERA_UNUSED_PARAMETER FEATSTD_UNUSED
Removed indirection from Candera to FeatStd #include <Candera\\/Systems\\/Diagnostics\\/(Appender|CharBuffer|ConsoleAppender|Debug|DebuggerOutSystemmemoryStatistic|ErrorHandling|FileAppender|LocationInfo|Measurable|SystemMemoryStatistic|Log(ger(Typed)?|Event|Level|))(.h|Control.h)> #include <FeatStd\\/Diagnostics\\/$1.h>
Removed indirection from Candera to FeatStd #include <FeatStd\\/Diagnostics\\/LogRealm.h> #include <FeatStd\\/Diagnostics\\/Log.h>