API reference was improved for multiple classes. Usage examples were added. Some misprints were fixed.
Now the CODEPORTING_CURRENT_RETTYPE macro is used as the return type of the get_Current method. Now it’s just a stub that do not modify its argument type, but in one of upcoming releases, it will return a reference instead of a shared pointer copy in the collections that store reference types or strings.
The generic ‘foreach’ enumeration translation rules is changed to:
Forward declarations are sorted in alphabetical order as much as it’s possible without violating topological sorting.
Namespaces that contain forward declarations are opened and closed as rare as possible.
Now Skia is built without the OpenGL support.
Now the porter supports using of the CppArgumentKind attribute with an argument type name parameter.
Now the CppArrayOnStack attribute can be applied only to single-dimensional arrays.
Implemented text alignment when using Graphics::DrawString with a given rectangle.
The zeroing of matrix values is removed when the Multiply method is called.
NullReferenceException is thrown when sorting elements of the List- and Array-class instances that contain null elements. Fixed.
The IPAddress- and IPEndPoint-class static data initialization order is fixed.
Now ArrayView can be passed as an argument to the Array.Copy method.
CheckedCast doesn’t throw OverflowException when the casted number is out of the value range. It also causes the compilation error (by warning C4018). Fixed.
The Bitmap::set_Palette method is optimized. It worked slowly with large images.
The new template was added for the case when the setter accepts const PropT& and the getter returns PropT. It happens when force_const_ref_parameters = true.
The delegate translation was improved.
The number of GraphicsPath points was fixed when the AddString method is used to add the tabulation symbol.
The begin and end methods were added to the ArrayView class.
Now the StackArray-class instance is used instead of std::array as a parameter in the ArrayView constructor.
Now the porter supports extension methods for the primitive types.
The System.Drawing.Drawing2D.AdjustableArrowCap class was implemented.
The TextureBrush constructor now behaves as in .Net.
The implicit object.Equals(object, object) method call is ported to Equals(left, right) instead of System::Object::Equals(left, right).
The porter doesn’t translate the cref tag when another project contains the specified type. Fixed.
The new force_const_ref_return_type_simple_properties option is added. Simple property getters (that contain only one return statement) of shared pointer types return const references to backed fields when this option is enabled.
Now the porter supports global enums with the Flags attribute.
Full List of Issues Covering all Changes in this Release
Regular memory leaks check
Add usage examples for system classes
Fix cycles detection mechanism failure
Fix IPAddress and IPEndPoint classes static data initialization order
Add Array.Copy support for ArrayView class [asposecpplib]
Fix CheckedCast compilation and behavior
Porter: Improve delegates translation
Fix RegressionTests_v21_10.SLIDESNET_42542 test
Changes in asposecpplib for ArrayView class
Add support for porting extension methods for value types (int, long, etc.)
Implement System.Drawing.Drawing2D.AdjustableArrowCap class
modify wrap mode in TextureBrush constructor
Incorrect porting of implicit object.Equals(a,b) invocation expression
Investigate Linux so files size growth
Porter: Improve cref tags translation
Support global enums with Flags attribute
Sort forward declarations where possible
Build skia without OpenGL support
Porter: Enhance CppArgumentKind attribute in config with an argument type name parameter
Public API and Backward Incompatible Changes
The new implementation of the classes that belong to the ‘System.Xml’ namespace will be based on the ported code of CoreFx 2.0 instead of using libxml2. The classes that belong to the ‘System.Xml.Serialization’, ‘System.Xml.Xsl.IlGen’, ‘System.Xml.Xsl.QIL’, ‘System.Xml.Xsl.Runtime’, and ‘System.Xml.Xsl.Xslt’ namespaces will be removed. The ‘XslCompiledTransform’ class will use ‘XslTransform’. The async calls won’t be supported.
The get_Current method of the IEnumerable class and its inheritors will return a value by reference instead of returning by value when a collection stores reference types or strings. It is advisable everywhere when impossible to use C++ iterators (such as iterating over IList or any other interface). Using references instead of copying gives a good performance profit (up to 4x times faster).
The performance of methods of the classes that belong to ‘System::IO’ will be improved. Methods of ‘Stream’, ‘TextWriter’, and their inheritors classes will accept arguments by const reference instead of copying pointers. Possibly, the C#-code of a class-inheritor method is needs to be changed when the passed argument is changed inside it.
The new IEnumerable-level iterators and iterators for collections with duck typing will be added. The virtual native STL iterators are used where it is possible. New iterators are copiable, have full list of operators, work faster, and allow changing a container’s element. But not all implementations provide all operators. E.g. the features of a one-direction iterator are available when Enumerator is used. An iterator dereferencement return type will be changed to reference.