REPORT ZPAB06_QUEUE.
CLASS QUEUE DEFINITION.
PUBLIC SECTION.
*Because the class is just for display.so the queue only can store
*integer.
TYPES:BEGIN OF ST_QUEUE,
ITEM TYPE I,
END OF ST_QUEUE.
DATA: NITEMS TYPE I READ-ONLY. "THE QUANTITY OF ITEM
DATA: ITAB TYPE TABLE OF ST_QUEUE, "THE ITAB STORE ITEM
WA LIKE LINE OF ITAB. "THE WA OF ITAB.
METHODS:CONSTRUCTOR, "CONSTRUCTOR
INSERT IMPORTING ITEM TYPE I, "insert items
REMOVE RETURNING VALUE(ITEM) TYPE I "Remove the first ONE
EXCEPTIONS NOITEMS, "NO ITEM IS QUEUE.
PEEKFRONT RETURNING VALUE(ITEM) TYPE I "GET THE VALUE OF 1st
EXCEPTIONS NOITEMS, "NO ITEM IS QUEUE.
*X='1' IF THE QUEUE IS EMPTY ELSE X = 0
ISEMPTY RETURNING VALUE(X) TYPE I.
ENDCLASS.
CLASS QUEUE IMPLEMENTATION.
METHOD CONSTRUCTOR. "CONSTRUCTOR
*initialize the queue
NITEMS = 0.
CLEAR ITAB.
ENDMETHOD.
METHOD INSERT. "insert items
CLEAR WA. "clear the work area
WA-ITEM = ITEM.
APPEND WA TO ITAB. "insert the items into queue
NITEMS = NITEMS + 1. "ONE MORE ITEM
ENDMETHOD.
METHOD REMOVE. "Remove the first one
CLEAR WA. "clear the work area
IF NITEMS <> 0. "Do while there are items in queue
READ TABLE ITAB INTO WA INDEX 1."read the remove item into wa
DELETE ITAB INDEX 1. "REMOVE THE ITEM.
ITEM = WA-ITEM. "Returning the value
NITEMS = NITEMS - 1. ""ONE LESS ITEM
ELSE.
RAISE NOITEMS. "there are no items.
ENDIF.
ENDMETHOD.
METHOD PEEKFRONT.
CLEAR WA. "clear the work area
IF NITEMS <> 0. "Do while there are items in queue
READ TABLE ITAB INTO WA INDEX 1."read the remove item into wa
ITEM = WA-ITEM. "Returning the value
ELSE.
RAISE NOITEMS. "there are no items.
ENDIF.
ENDMETHOD.
METHOD ISEMPTY.
IF NITEMS = 0. "THE QUEUE IS EMPTY
X = 1.
ELSE. "THE QUEUE IS NOT EMPTY
X = 0.
ENDIF.
ENDMETHOD.
ENDCLASS.
CLASS QUEUE DEFINITION.
PUBLIC SECTION.
*Because the class is just for display.so the queue only can store
*integer.
TYPES:BEGIN OF ST_QUEUE,
ITEM TYPE I,
END OF ST_QUEUE.
DATA: NITEMS TYPE I READ-ONLY. "THE QUANTITY OF ITEM
DATA: ITAB TYPE TABLE OF ST_QUEUE, "THE ITAB STORE ITEM
WA LIKE LINE OF ITAB. "THE WA OF ITAB.
METHODS:CONSTRUCTOR, "CONSTRUCTOR
INSERT IMPORTING ITEM TYPE I, "insert items
REMOVE RETURNING VALUE(ITEM) TYPE I "Remove the first ONE
EXCEPTIONS NOITEMS, "NO ITEM IS QUEUE.
PEEKFRONT RETURNING VALUE(ITEM) TYPE I "GET THE VALUE OF 1st
EXCEPTIONS NOITEMS, "NO ITEM IS QUEUE.
*X='1' IF THE QUEUE IS EMPTY ELSE X = 0
ISEMPTY RETURNING VALUE(X) TYPE I.
ENDCLASS.
CLASS QUEUE IMPLEMENTATION.
METHOD CONSTRUCTOR. "CONSTRUCTOR
*initialize the queue
NITEMS = 0.
CLEAR ITAB.
ENDMETHOD.
METHOD INSERT. "insert items
CLEAR WA. "clear the work area
WA-ITEM = ITEM.
APPEND WA TO ITAB. "insert the items into queue
NITEMS = NITEMS + 1. "ONE MORE ITEM
ENDMETHOD.
METHOD REMOVE. "Remove the first one
CLEAR WA. "clear the work area
IF NITEMS <> 0. "Do while there are items in queue
READ TABLE ITAB INTO WA INDEX 1."read the remove item into wa
DELETE ITAB INDEX 1. "REMOVE THE ITEM.
ITEM = WA-ITEM. "Returning the value
NITEMS = NITEMS - 1. ""ONE LESS ITEM
ELSE.
RAISE NOITEMS. "there are no items.
ENDIF.
ENDMETHOD.
METHOD PEEKFRONT.
CLEAR WA. "clear the work area
IF NITEMS <> 0. "Do while there are items in queue
READ TABLE ITAB INTO WA INDEX 1."read the remove item into wa
ITEM = WA-ITEM. "Returning the value
ELSE.
RAISE NOITEMS. "there are no items.
ENDIF.
ENDMETHOD.
METHOD ISEMPTY.
IF NITEMS = 0. "THE QUEUE IS EMPTY
X = 1.
ELSE. "THE QUEUE IS NOT EMPTY
X = 0.
ENDIF.
ENDMETHOD.
ENDCLASS.