Jump to content

  • Log In with Google      Sign In   
  • Create Account


abrakadabra

Member Since 12 May 2013
Offline Last Active Aug 31 2014 01:56 PM

Topics I've Started

CMake - I don't want my string to be a list!

31 August 2014 - 12:12 PM

I am trying to set my environment variable using cmake but the result from this string

PATH=%PATH%;C:/Program Files/Autodesk/Maya2015/bin/

 

results in

PATH=%PATH%

C:/Program Files/Autodesk/Maya2015/bin/

 

CMake thinks the string is a list because of the semicolon. Another CMake wtf moment. Any idea how to prevent this and force the string be a string and not a list?


What is the point of blocking sockets?

18 April 2014 - 11:48 PM

I have never understood the point of blocking sockets. Even in a multithreading setting the socket would block indefinitely and force you to terminate the thread.

 

Apart from toy programs - is there a use for blocking sockets?


Paul Nettle's memory tracker mmgr and C++11

13 April 2014 - 02:14 AM

To remember where allocations and deallocations occured paul nettle redefine new and delete like this:

// ---------------------------------------------------------------------------------------------------------------------------------
// Variations of global operators new & delete
// ---------------------------------------------------------------------------------------------------------------------------------

void	*operator new(size_t reportedSize);
void	*operator new[](size_t reportedSize);
void	*operator new(size_t reportedSize, const char *sourceFile, int sourceLine);
void	*operator new[](size_t reportedSize, const char *sourceFile, int sourceLine);
void	operator delete(void *reportedAddress);
void	operator delete[](void *reportedAddress);

#endif // _H_MMGR

// ---------------------------------------------------------------------------------------------------------------------------------
// Macros -- "Kids, please don't try this at home. We're trained professionals here." :)
// ---------------------------------------------------------------------------------------------------------------------------------

#include "nommgr.h"
#define	new		(m_setOwner  (__FILE__,__LINE__,__FUNCTION__),false) ? NULL : new
#define	delete		(m_setOwner  (__FILE__,__LINE__,__FUNCTION__),false) ? m_setOwner("",0,"") : delete
#define	malloc(sz)	m_allocator  (__FILE__,__LINE__,__FUNCTION__,m_alloc_malloc,sz)
#define	calloc(sz)	m_allocator  (__FILE__,__LINE__,__FUNCTION__,m_alloc_calloc,sz)
#define	realloc(ptr,sz)	m_reallocator(__FILE__,__LINE__,__FUNCTION__,m_alloc_realloc,sz,ptr)
#define	free(ptr)	m_deallocator(__FILE__,__LINE__,__FUNCTION__,m_alloc_free,ptr)

However, in C++11 you can delete constructors like this:

class TestClass
{
public:
	TestClass() = delete; //Breaks the memory tracker!
	TestClass(int i) { }
	virtual ~TestClass() { cout << "Destructor called." << endl; }
};

Any idea how to modify the memory tracker to work with C++11? Wasn't it pretty damn stupid to choose "delete" for deleting constructors when it is already a keyword for freeing memory?


polymorphism and inheriting from a base template class

12 May 2013 - 04:24 AM

I am trying to design a component-based entity system and I came up with a solution that looks similar to this:

class base_component
{

};

template <class T>
class base_system
{
public:
protected:
	std::map<int, T> m_components;
};

class spacial_component : public base_component
{
public:
};

class spacial_system : public base_system<spacial_component>
{

};

 

This way I was hoping the base_system class would create an std::map with the components for every component system.

 

What I am wondering is if it is valid to design it like this and then use polymorphism like the following:

 

spacial_system ss;

base_system<base_component>* bs = (base_system<base_component>*) ss;

 

My hope would be that this is possible since my entity_system class should store a vector of all available systems for dispatching messages to the systems using virtual functions. I have it implemented in VS 2012 and it works there. Then I tried to use the same code on VS 2010 and got random crashes. I suspect the cast to base_system<base_component>* is not actually valid C++. So my question is, is the cast valid? Should I use another solution?


PARTNERS