Today is all about cleaning up ugly code for me.
Remember when I said I removed all pointers from my project? well, it left me with some ugly looking code. Of course, when you know how much trouble points are, you realize that ugly code is better. However, there are ways around it. Let’s look at some before and after pictures.
before
map<string, shared_ptr<Parameter> > encodeParams; // <-- this is an ugly line of code, although it's better than a map of ptrs encodeParams["quality"] = shared_ptr(new Parameter()); encodeParams["quality"]->setFloat(0.5f); ImageBufferIO::writeImageToDisk(filename, someImage, encodeParams);
after
by adding a few handy typedefs as public members of my Parameter class , and a static factory method, I get
map<string, Parameter::Ptr> encodeParams; encodeParams["quality"] = Parameter::create(); encodeParams["quality"]->setFloat(0.5f); ImageBufferIO::writeImageToDisk(filename, someImage, encodeParams);
Here is a particularly ugly piece that comes with switching from byte_t[] to vector buffers
before
ofstream out("out.bmp"); // write BMP header stuff // typedef vector Buffer_t shared_ptr<Buffer_t> bytes = image.getBuffer(); out.write(&(*bytes)[0], bytes->size()); // ew, this is really ugly, yet still better ugly than dangerous
after
ofstream out("out.bmp"); // write BMP header stuff // wrote Buffer class which derives from vector Buffer::Ptr bytes = image.getBuffer(); bytes->write(out); // do all of the ugly inside this method here so it's only written once, instead of every time we write to ostream // better to have 1 instance of ugly code than 20
Image may be NSFW.
Clik here to view.

Clik here to view.
