locationtriggering/ltclientlib/src/lbtgeocircle.cpp
author hgs
Mon, 27 Sep 2010 16:57:22 +0530
changeset 50 4c28d569e1fe
parent 0 667063e416a2
permissions -rw-r--r--
201037_001

/*
* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
* All rights reserved.
* This component and the accompanying materials are made available
* under the terms of "Eclipse Public License v1.0"
* which accompanies this distribution, and is available
* at the URL "http://www.eclipse.org/legal/epl-v10.html".
*
* Initial Contributors:
* Nokia Corporation - initial contribution.
*
* Contributors:
*
* Description: Implementation of class representing a geographical
* circular area.
*
*/


#include <e32math.h>
#include "lbtgeocircle.h"
#include "lbtgeoareabase.h"
#include "lbterrors.h"





// ======== LOCAL FUNCTIONS ========

// ---------------------------------------------------------------------------
// CLbtGeoCircle::NewL()
//
// (other items were commented in a header).
// ---------------------------------------------------------------------------
//
EXPORT_C   CLbtGeoCircle* CLbtGeoCircle::NewL() 
    {
   	CLbtGeoCircle* self = new( ELeave ) CLbtGeoCircle;
    CleanupStack::PushL( self );
    self->ConstructL();
	CleanupStack::Pop( self );  
	return self;
    }
    
// ---------------------------------------------------------------------------
// CLbtGeoCircle::NewLC()
//
// (other items were commented in a header).
// ---------------------------------------------------------------------------
//
EXPORT_C   CLbtGeoCircle* CLbtGeoCircle::NewLC() 
    {
   	CLbtGeoCircle* self = new( ELeave ) CLbtGeoCircle;
    CleanupStack::PushL( self );
    self->ConstructL();
    return self;
    }    
    
// ---------------------------------------------------------------------------
// CLbtGeoCircle::NewL(TCoordinate aCenter,
//            TReal aRadius)
// (other items were commented in a header).
// ---------------------------------------------------------------------------
//

EXPORT_C  CLbtGeoCircle* CLbtGeoCircle::NewL( const TCoordinate& aCenter,
            TReal aRadiusInMeters )

    {
	CLbtGeoCircle* self = new( ELeave ) CLbtGeoCircle;
    CleanupStack::PushL( self );
    self->ConstructL(aCenter,aRadiusInMeters);
	CleanupStack::Pop( self );    
    return self;
    }

// ---------------------------------------------------------------------------
// CLbtGeoCircle::NewLC(TCoordinate aCenter,
//            TReal aRadius)
// (other items were commented in a header).
// ---------------------------------------------------------------------------
//

EXPORT_C  CLbtGeoCircle* CLbtGeoCircle::NewLC( const TCoordinate& aCenter,
            TReal aRadiusInMeters )

    {
	CLbtGeoCircle* self = new( ELeave ) CLbtGeoCircle;
    CleanupStack::PushL( self );
    self->ConstructL(aCenter,aRadiusInMeters);
    return self;
    }


// ---------------------------------------------------------------------------
// CLbtGeoCircle::ConstructL()
// ---------------------------------------------------------------------------
//
void CLbtGeoCircle::ConstructL(TCoordinate aCenter,TReal aRadius)
    {
    iCenter=aCenter;
    if(aRadius<0)
		User::Panic(KLbtClientPanicCategory,ELbtErrArgument);
	iRadius=aRadius;
    } 
   
   
// ---------------------------------------------------------------------------
// CLbtGeoCircle::ConstructL()
// Symbian 2nd phase constructor can leave.
// ---------------------------------------------------------------------------
//
void CLbtGeoCircle::ConstructL()
    {
	iRadius=0;
	}
// ---------------------------------------------------------------------------
// CLbtGeoCircle::Center()
// (other items were commented in a header).
// ---------------------------------------------------------------------------
//    
TCoordinate CLbtGeoCircle::Center() const
    {
    // To Do : Check if the center has been set or not. If not then lat long values should be NaN
	return iCenter;
    }

// ---------------------------------------------------------------------------
// From class CLbtGeoAreaBase.
// (other items were commented in a header).
// ---------------------------------------------------------------------------
//
CLbtGeoAreaBase::TGeoAreaType CLbtGeoCircle::Type() const
    {
	return CLbtGeoAreaBase::ECircle;
    }

// ---------------------------------------------------------------------------
// CLbtGeoCircle::SetCenter()
// (other items were commented in a header).
// ---------------------------------------------------------------------------
//  
EXPORT_C void CLbtGeoCircle::SetCenter(const TCoordinate& aCenter )
    {
    iCenter=aCenter;
    }

// ---------------------------------------------------------------------------
// CLbtGeoCircle::Radius()
// (other items were commented in a header).
// ---------------------------------------------------------------------------
// 
EXPORT_C TReal CLbtGeoCircle::Radius() const
    {
	return iRadius;
    }

// ---------------------------------------------------------------------------
// CLbtGeoCircle::SetRadius()
// (other items were commented in a header).
// ---------------------------------------------------------------------------
// 
EXPORT_C void CLbtGeoCircle::SetRadius( TReal aRadiusInMeters )
    {
	if(aRadiusInMeters<0)

		User::Panic(KLbtClientPanicCategory,ELbtErrArgument);
	
	iRadius=aRadiusInMeters;
    }

// ---------------------------------------------------------------------------
// CLbtGeoCircle::GetAdditionalGeoAreaInfo()
// (other items were commented in a header).
// ---------------------------------------------------------------------------
// 
EXPORT_C RPointerArray< CLbtGeoAreaBase >& CLbtGeoCircle::GetAdditionalGeoAreaInfo()
    {
    return iAdditionalGeoAreaInfo;
    }

// ---------------------------------------------------------------------------
// CLbtGeoCircle::SetAdditionalGeoAreaInfo()
// This method is currently not supported.
// ---------------------------------------------------------------------------
// 
EXPORT_C void CLbtGeoCircle::SetAdditionalGeoAreaInfo(CLbtGeoAreaBase* /*aGeoArea*/)
    {
    
    }

// ---------------------------------------------------------------------------
// CLbtGeoCircle::CLbtGeoCircle()
// Default constructor
// ---------------------------------------------------------------------------
// 
CLbtGeoCircle::CLbtGeoCircle()
    {
	
    }
    
// ---------------------------------------------------------------------------
// CLbtGeoCircle::~CLbtGeoCircle()
// Destructor
// ---------------------------------------------------------------------------
// 
CLbtGeoCircle::~CLbtGeoCircle()
    {
	
    }

// ---------------------------------------------------------------------------
// CLbtGeoCircle::DoInternalizeL()
// (other items were commented in a header).
// ---------------------------------------------------------------------------
// 
EXPORT_C void CLbtGeoCircle::DoInternalizeL(RReadStream& aStream) 
    {
	TReal64 Lat,Long;
	TReal Rad;
	TReal32 Alt;
	Lat=aStream.ReadReal64L();
	Long=aStream.ReadReal64L();
	
    Alt=aStream.ReadReal32L();
    Rad=aStream.ReadReal32L();
    iCenter.SetCoordinate(Lat,Long,Alt);
	iRadius=Rad;
	}
// ---------------------------------------------------------------------------
// CLbtGeoCircle::DoExternalizeL()
// (other items were commented in a header).
// ---------------------------------------------------------------------------
// 
EXPORT_C void CLbtGeoCircle::DoExternalizeL(RWriteStream& aStream) const 
    {
	aStream.WriteReal64L(iCenter.Latitude());
	aStream.WriteReal64L(iCenter.Longitude());
	aStream.WriteReal32L(iCenter.Altitude());

	aStream.WriteReal32L(iRadius);
	}

// ---------------------------------------------------------------------------
// CLbtGeoCircle::ValidateGeoCircleInfoL()
// (other items were commented in a header).
// ---------------------------------------------------------------------------
// 
void CLbtGeoCircle::ValidateCircleInformationL()
    {
    if( Math::IsNaN(iCenter.Latitude()) ||
        Math::IsNaN(iCenter.Longitude())||
        iRadius == 0 )
        {
        User::Leave( KErrArgument );
        } 
    }