/** \file
 *
 *  Contains the Service class definition.
 *
 *  Copyright (c) 2007,2008,2009 MBARI
 *  MBARI Proprietary Information.  All Rights Reserved
 *
 */

#ifndef LOGSERVICETYPE_H_
#define LOGSERVICETYPE_H_

#include "utils/AuvMath.h"

/// Base class for a generalized set of "log data destinations," including
/// to files (text or binary), over communications links, etc.
///
/// \ingroup logging
class Service
{
public:

    enum ServiceType
    {
        SERVICE_UNSPECIFIED = -1,
        SERVICE_DIRECT,
        SERVICE_COURIER,
        SERVICE_EXPRESS,
        SERVICE_PRIORITY,
        SERVICE_NORMAL,
        SERVICE_BULK,
        SERVICE_COUNT,
        SERVICE_MULTI
    };

    static ServiceType Str2ServiceType( const char* const serviceTypeStr, int len = -1 );

    static const char* ServiceType2Str( Service::ServiceType serviceType );

    static size_t ServiceType2Strlen( Service::ServiceType serviceType );

    static const char* const SERVICE_TYPE_STRS[SERVICE_COUNT];

    static size_t const SERVICE_TYPE_STRLEN[SERVICE_COUNT];

    /// Destructor
    virtual ~Service();

private:
    // Note that the copy constructor below is private and not given a body.
    // Any attempt to call it will return a compiler error.
    Service( const Service& old ); // disallow copy constructor

};

#endif /*LOGSERVICETYPE_H_*/
