add boost dependency
add GPI and functions
add Observer/Subject pattern
made Subject virtual
add Scalar type