3 #ifndef DatumLibraryImplementation_H 
    4 #define DatumLibraryImplementation_H 
  134   class CCSThreadMutex;
 
  139     class EllipsoidLibraryImplementation;
 
  140     class CartesianCoordinates;
 
  141     class GeodeticCoordinates;
 
  161       static void removeInstance();
 
  190       void define3ParamDatum( 
const char *code, 
const char *name, 
const char *ellipsoidCode, 
 
  191                               double deltaX, 
double deltaY, 
double deltaZ,
 
  192                               double sigmaX, 
double sigmaY, 
double sigmaZ, 
 
  193                               double westLongitude, 
double eastLongitude, 
double southLatitude, 
double northLatitude );
 
  220       void define7ParamDatum( 
const char *code, 
const char *name, 
const char *ellipsoidCode, 
 
  221                               double deltaX, 
double deltaY, 
double deltaZ,
 
  222                               double rotationX, 
double rotationY, 
double rotationZ, 
 
  223                               double scale, 
double westLongitude, 
 
  224                               double eastLongitude, 
double southLatitude, 
 
  225                               double northLatitude);
 
  238       void removeDatum( 
const char* code );
 
  248       void datumCount( 
long *count );
 
  260       void datumIndex( 
const char *code, 
long *index );
 
  271       void datumCode( 
const long index, 
char *code );
 
  282       void datumName( 
const long index, 
char *name );
 
  294       void datumEllipsoidCode( 
const long index, 
char *code );
 
  307       void datumStandardErrors( 
const long index, 
double *sigmaX, 
double *sigmaY, 
double *sigmaZ );
 
  322       void datumSevenParameters( 
const long index, 
double *rotationX, 
double *rotationY, 
double *rotationZ, 
double *scaleFactor);
 
  335       void datumTranslationValues(
 
  357          const long      sourceIndex,
 
  358          const long      targetIndex, 
 
  375       void datumUserDefined( 
const long index, 
long *result );
 
  385       bool datumUsesEllipsoid( 
const char *ellipsoidCode );
 
  400       void datumValidRectangle( 
const long index, 
double *westLongitude, 
double *eastLongitude, 
double *southLatitude, 
double *northLatitude );
 
  419       CartesianCoordinates* geocentricDatumShift( 
const long sourceIndex, 
const double sourceX, 
const double sourceY, 
const double sourceZ,
 
  420                                  const long targetIndex );
 
  437       CartesianCoordinates* geocentricShiftFromWGS84( 
const double WGS84X, 
const double WGS84Y, 
const double WGS84Z, 
const long targetIndex );
 
  454       CartesianCoordinates* geocentricShiftToWGS84( 
const long sourceIndex, 
const double sourceX, 
const double sourceY, 
const double sourceZ );
 
  474                                const long targetIndex );
 
  492                                    const long targetIndex );
 
  521       void retrieveDatumType( 
const long index, 
DatumType::Enum *datumType );
 
  536       void validDatum( 
const long index, 
double longitude, 
double latitude, 
long *result );
 
  570       static int instanceCount;
 
  572       std::vector<Datum*> datumList;
 
  576       long datum3ParamCount;
 
  577       long datum7ParamCount;
 
  595       void write3ParamFile();
 
  603       void write7ParamFile();
 
  618       GeodeticCoordinates* geodeticShiftWGS84ToWGS72( 
const double WGS84Longitude, 
const double WGS84Latitude, 
const double WGS84Height );
 
  634       GeodeticCoordinates* geodeticShiftWGS72ToWGS84( 
const double WGS72Longitude, 
const double WGS72Latitude, 
const double WGS72Height );
 
  649       CartesianCoordinates* geocentricShiftWGS84ToWGS72( 
const double X_WGS84, 
const double Y_WGS84, 
const double Z_WGS84 );
 
  664       CartesianCoordinates* geocentricShiftWGS72ToWGS84( 
const double X, 
const double Y, 
const double Z );
 
  671       static void deleteInstance();