landmarks/locationlandmarks/internalservices/inc/EPos_CPosLmDiskUtilities.h
author Peter Fordham <peter.fordham@gmail.com>
Fri, 19 Mar 2010 17:30:40 -0700
branchCompilerCompatibility
changeset 9 5b5e2139c4b9
parent 0 667063e416a2
permissions -rw-r--r--
Bug 1729 - Add braces around _FOFF macro.

/*
* Copyright (c) 2002-2005 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: Helper class for handling out of disk space situations.
*
*/


#ifndef CPOSLMDISKUTILITIES_H
#define CPOSLMDISKUTILITIES_H

#include <e32base.h>
#include <f32file.h>
#include <EPos_CPosLandmark.h>
#include <EPos_CPosLandmarkCategory.h>

/**
*
*   Helper class for handling out of disk space situations.
*
*/
class CPosLmDiskUtilities : public CBase
    {
    public:

        enum TLmOperation
            {
            EAddLandmarkOp,
            /**< Add landmark operation. */
            EUpdateLandmarkOp,
            /**< Update landmark operation. */
            ERemoveLandmarkOp,
            /**< Remove landmark operation. */
            ERemoveLandmarksOp,
            /**< Remove landmarks operation. */
            ERemoveAllLandmarksOp,
            /**< Remove all landmarks operation. */
            EAddLmCategoryOp,
            /**< Add landmark category operation. */
            EUpdateLmCategoryOp,
            /**< Update landmark category operation. */
            ERemoveLmCategoryOp,
            /**< Remove landmark category operation. */
            ERemoveLmCategoriesOp,
            /**< remove landmark categories operation. */
            EAddLmCategoryToLmOp,
            /**< Add landmark category to landmark operation. */
            ERemoveLmCategoryFromLmOp,
            /**< Remove landmark category from landmark operation. */
            ECreateFieldsLmIdIndex,
            /**< Create index in fields table on Lm ID field */
            ECreateCategoriesLmIdIndex,
            /**< Create index in categories table on Lm ID field */
            };

    public:  // Constructors and destructor

        /**
        * Two-phased constructor.
        */
        IMPORT_C static CPosLmDiskUtilities* NewL();

        /**
        * Destructor.
        */
        virtual ~CPosLmDiskUtilities();

    public: // New functions

        /**
        * Method to check if free drive storage
        * space is or will fall below Critical Level (CL).
        * The CL is defined by this module.
        *
        * Method will leave with @p KErrDiskFull if disk size is/or will
        * decrease below critical level.
        *
        * @param[in] aBytesToWrite Number of bytes the caller is about to add.
        *   The value 0 checks if the current space is already below the CL.
        * @param[in] aDrive Character of the drive to be checked.
        */
        IMPORT_C void DiskSpaceBelowCriticalLevelL(
            TInt  aBytesToWrite,
            TChar aDrive );

        /**
        * Method to estimate disk size impact for a landmark operation.
        *
        * Method for operations, EAddLandmarkOp and EUpdateLandmarkOp.
        * Otherwise method will raise a debug panic.
        *
        * @param[in] aOperation Type of landmark operation.
        * @param[in] aLandmark Landmark to be estimated.
        * @return Estimated number of bytes the operation will
        *         take on disk.
        */
        IMPORT_C TInt EstimatedDiskSizeOfLmOperation(
            TLmOperation aOperation,
            const CPosLandmark& aLandmark );

        /**
        * Method to estimate disk size impact for a landmark operation.
        *
        * Method for operations, EAddLmCateogoryOp and EUpdateLmCategoryOp.
        * Otherwise method a will raise a debug panic.
        *
        * @param[in] aOperation Type of landmark operation.
        * @param[in] aLmCategory Landmark category to be estimated.
        * @return Estimated number of bytes the operation will
        *         take on disk.
        */
        IMPORT_C TInt EstimatedDiskSizeOfLmOperation(
            TLmOperation aOperation,
            const CPosLandmarkCategory& aLmCategory );

        /**
        * Method to estimate disk size impact for a landmark operation.
        *
        * Method for operations, ERemoveLandmarkOp and ERemoveLmCategoryOp.
        * Otherwise method a will raise a debug panic.
        *
        * @param[in] aOperation Type of landmark operation.
        * @param[in] aLandmarkId Landmark item id to be estimated.
        * @return Estimated number of bytes the operation will
        *         take on disk.
        */
        IMPORT_C TInt EstimatedDiskSizeOfLmOperation(
            TLmOperation aOperation,
            const TPosLmItemId& aLandmarkId );

        /**
        * Method to estimate disk size impact for a landmark operation.
        *
        * Method for operations, ERemoveLandmarksOp and ERemoveLmCategoriesOp.
        * Otherwise method a will raise a debug panic.
        *
        * @param[in] aOperation Type of landmark operation.
        * @param[in] aLandmarkIdArray Landmark item id's to be estimated.
        * @return Estimated number of bytes the operation will
        *         take on disk.
        */
        IMPORT_C TInt EstimatedDiskSizeOfLmOperation(
            TLmOperation aOperation,
            const RArray<TPosLmItemId>& aLandmarkIdArray );

        /**
        * Method to estimate disk size impact for a landmark operation.
        *
        * Method for operations, EAddLmCategoryToLmOp and
        *   ERemoveLmCategoryFromLmOp.
        * Otherwise method a will raise a debug panic.
        *
        * @param[in] aOperation Type of landmark operation.
        * @param[in] aLandmarkId Landmark item id's to be estimated.
        * @param[in] aLandmarkIdArray Landmark item id's to be estimated.
        * @return Estimated number of bytes the operation will
        *         take on disk.
        */
        IMPORT_C TInt EstimatedDiskSizeOfLmCatOperation(
            TLmOperation aOperation,
            TPosLmItemId& aLandmarkId,
            const RArray<TPosLmItemId>& aLandmarkIdArray );

        /**
        * Method to estimate disk size impact for an empty landmark database.
        *
        * @return Estimated number of bytes.
        */
        IMPORT_C TInt EstimatedDiskSizeOfEmptyDatabase();
        
        /**
        * Method to estimate disk size impact for creating
        * foreign index in a table.
        * @return Estimated number of bytes.
        */
        IMPORT_C TInt EstimatedDiskSizeOfIndex(
            TLmOperation aOperation,
            TInt aCountOfRecords );

    protected:

        /**
        * C++ default constructor.
        */
        CPosLmDiskUtilities();

        /**
        * By default Symbian 2nd phase constructor is private.
        */
        void ConstructL();

        /**
        * Method for estimating disk size for a landmark.
        *
        * @param aLandmarkCategory Landmark category to estimate.
        * @return Number of bytes the estimated landmark would take.
        */
        TInt CalculateLandmarkDisksize( const CPosLandmark& aLandmark );

        /**
        * Method for estimating disk size for a landmark cagegory.
        *
        * @param aLandmarkCategory Landmark category to estimate.
        * @return Number of bytes the estimated landmark category
        *         would take.
        */
        TInt CalculateLandmarkCategoryDisksize(
            const CPosLandmarkCategory& aLandmarkCategory );

    private:

        // By default, prohibit copy constructor
        CPosLmDiskUtilities( const CPosLmDiskUtilities& );
        // Prohibit assigment operator
        CPosLmDiskUtilities& operator= ( const CPosLmDiskUtilities& );

    private:

        // File session
        RFs         iFs;

        // Level for critical disk space
        TInt        iCriticalDiskLevel;

    };

#endif      // CPOSLMINTERALSERVICES_H