Design Automation For Optical Computing : Boolean Logic And Neural Networks