This patch provides maintainability and debuggability of tile.cpp. It replacements many macros to C++ template, and abolish self inclusion.