CCA object interface for linear algebra objects Desires: Support users in Fortran, C, and C++. Allow users in each language to do things "naturally" in that language, i.e. C++ users should have classes Allow the same application to use some objects written in C and some written in C++ Allow users to determine whose objects they use at RUN time; i.e. you cannot resolve function names at compile time! Any toolkits vectors MUST work with other components from other toolkits. CCA Approach: There are NO stand-alone functions, only operations we can call on objects. Objects are natural for a particular language i.e. classes in C++, structs in C, derived data types in F90. Each object type, like vector, has wrappers that can make it look like a native C, C++ or Fortran 90 object. For example: class CCA_CPPVector; - C++ vector object typedef struct _CCA_CVector *CCA_CVector; - C vector structure CCA_CPPVectorC(CCA_CVector) - returns a C++ vector object wrapper from a C vector object CCA_CVectorCPP(CCA_CPPVector,CCA_CVector*) - returns a C vector object wrapper from a C++ vector object Include file organization: cca_c*.h - header files for C interface cca_cpp*.h - header files for C++ cca_c_cpp*.h - header files for wrappers between C and C++ (both directions)