Category: Code Snippets

05 Sep

Code Snippet II : Handy tridimensional vector class for C++

As you may have seen, I’ve changed the title of a previous post and I have started a series named “Code Snippets”. These are small pieces of code containing utility functions or classes.

So without further delays here is the code for a Vector3f class, implementing a tridimensional vector using low precision floating point numbers, for tridimensional graphics or audio. Released under BSD license.

Sources here.

Note : the class has no constructors so that object allocation does not have any significant performance impact. An handy static method called Make is provided to construct a Vector3f given its components on the fly.

22 Aug

Code Snippet I : Wrapper for CLR string to native string marshalling

A frequent (too much frequent) need in Managed C++ is going from System::String objects to char* or wchar_t* strings. The boring side of the marshalling is that the memory allocated with the StringToHGlobalxxx functions should be freed with a matching call to FreeHGlobal.

The solution is simple : using the power of C++ destructors we can create a temporary object for the entire time we need the string. Whenever the object goes out of scope, the string is automagically freed.

You can find the code (released to public domain) here.

Please note that assignments (and copy-constructor) are disabled (they are in an empty private method) to preserve the destruction safety (the free is thus execute once and only once).

As an example you can do :

void mystrcpy(char* dest, const System::String __gc* source)
strcpy(dest, StringAutoMarshal(source));

with no need to manage the marshalling manually.