stif/TestServer/src/Printqueue.cpp
branchRCL_3
changeset 59 8ad140f3dd41
parent 0 a03f92240627
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/stif/TestServer/src/Printqueue.cpp	Wed Oct 13 16:17:58 2010 +0300
@@ -0,0 +1,282 @@
+/*
+* 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: This module contains implementation of CPrintQueue 
+* class and TPrintQueueItem class member functions.
+*
+*/
+
+// INCLUDE FILES
+#include "PrintQueue.h"
+
+// EXTERNAL DATA STRUCTURES
+
+// EXTERNAL FUNCTION PROTOTYPES  
+
+// CONSTANTS
+
+// MACROS
+
+// LOCAL CONSTANTS AND MACROS
+
+// MODULE DATA STRUCTURES
+
+// LOCAL FUNCTION PROTOTYPES
+
+// FORWARD DECLARATIONS
+
+// ==================== LOCAL FUNCTIONS =======================================
+
+// None
+
+// ================= MEMBER FUNCTIONS =========================================
+
+
+// Initialise the queue
+const TInt TPrintQueueItem::iOffset = _FOFF( TPrintQueueItem, iSlink );
+
+
+/*
+-------------------------------------------------------------------------------
+
+    Class: CPrintQueue
+
+    Method: NewL
+
+    Description: Constructs a print queue.
+      
+    Parameters: None
+
+    Return Values: CPrintQueue*                     Pointer to new queue
+
+    Errors/Exceptions: Leaves if memory allocation fails.
+
+    Status: Approved
+    
+-------------------------------------------------------------------------------
+*/
+CPrintQueue* CPrintQueue::NewL()
+    {
+
+    CPrintQueue* self = new( ELeave ) CPrintQueue;
+    return self;
+
+    }
+
+
+/*
+-------------------------------------------------------------------------------
+
+    Class: CPrintQueue
+
+    Method: CPrintQueue
+
+    Description: Constructor.
+    Initialises the queue and queue iterator.
+
+    Parameters: None
+
+    Return Values: None
+
+    Errors/Exceptions: None
+
+    Status: Approved
+
+-------------------------------------------------------------------------------
+*/
+CPrintQueue::CPrintQueue():
+     iQueue( TPrintQueueItem::iOffset ),
+     iQueueIterator( iQueue )
+    {
+
+    iQueueLen = 0;
+
+    }
+
+
+
+/*
+-------------------------------------------------------------------------------
+
+    Class: CPrintQueue
+
+    Method: ~CPrintQueue
+
+    Description: Destructor.
+
+    Deletes all items in queue. Function requires that it is called from
+    the heap to where the items are constructed.
+       
+    Parameters: None
+
+    Return Values: None
+
+    Errors/Exceptions: None
+
+    Status: Approved
+    
+-------------------------------------------------------------------------------
+*/
+CPrintQueue::~CPrintQueue()
+    {
+    
+    TPrintQueueItem *item = NULL;
+
+    // Delete items in queue
+    while(( item = Pop() ) != NULL )
+        {
+        delete item;      // TPrintQueueItem destructor does't free the memory
+        }
+
+    }
+
+
+/*
+-------------------------------------------------------------------------------
+
+    Class: CPrintQueue
+
+    Method: Push
+
+    Description:
+
+    Push item to queue. If queue is full, does not add item to queue.
+
+    Parameters: TPrintQueueItem& anItem       :in:  Item to push to queue
+
+    Return Values: TInt                             KErrNoMemory if queue is full
+                                                    KErrNone     otherwise
+
+    Errors/Exceptions: None
+
+    Status: Approved
+
+-------------------------------------------------------------------------------
+*/
+TInt CPrintQueue::Push( TPrintQueueItem& anItem )
+    {
+
+    if( iQueueLen < KQueueMaxLen  )
+        {
+        iQueue.AddLast( anItem  );
+        iQueueLen++;
+
+        // Added successfully
+        return KErrNone;
+        }
+    else
+        {    
+        // Do not add to queue
+        return KErrNoMemory;
+        }
+
+    }
+
+/*
+-------------------------------------------------------------------------------
+
+    Class: CPrintQueue
+
+    Method: Pop
+
+    Description: Removes first item from queue and returns that.
+    if queue is empty, then return NULL.
+
+    Parameters: None
+
+    Return Values: TPrintQueueItem*                 Queue item or NULL.
+
+    Errors/Exceptions: None
+
+    Status: Approved
+    
+-------------------------------------------------------------------------------
+*/
+TPrintQueueItem* CPrintQueue::Pop()
+    {
+
+    TPrintQueueItem* firstItem = NULL;
+    
+    if( !iQueue.IsEmpty()  )
+        {
+        firstItem = iQueue.First();
+        iQueue.Remove( *firstItem  );
+        iQueueLen--;
+        }
+    
+    return( firstItem  );
+
+    }
+
+/*
+-------------------------------------------------------------------------------
+
+    Class: CPrintQueue
+
+    Method: Count
+
+    Description: Returns the queue size.
+    
+    Parameters: None
+
+    Return Values: TInt                             Count
+
+    Errors/Exceptions: None
+
+    Status: Approved
+    
+-------------------------------------------------------------------------------
+*/
+TInt CPrintQueue::Count()
+    {
+    
+    return( iQueueLen  );
+
+    }
+
+/*
+-------------------------------------------------------------------------------
+
+    Class: TPrintQueueItem
+
+    Method: TPrintQueueItem
+
+    Description: Constructor
+
+    C++ default constructor can NOT contain any code, that
+    might leave.
+    
+    Parameters  const TInt aPriority          :in:  Priority
+                const TStifInfoName& aText1       :in:  Description field
+                const TName& aText2           :in:  Text field
+
+    Return Values: None
+
+    Errors/Exceptions: None
+
+    Status: Approved
+    
+-------------------------------------------------------------------------------
+*/
+TPrintQueueItem::TPrintQueueItem( const TInt aPriority,
+                                  const TStifInfoName& aText1,
+                                  const TName& aText2 )
+    {
+
+    iPriority = aPriority;
+    iData1 = aText1;
+    iData2 = aText2;
+
+    }
+
+// End of File