Append queue

This commit is contained in:
Sergey Romanov 2015-05-15 22:30:06 +05:00
parent 05d01d2282
commit 1853e16bc9
2 changed files with 30 additions and 0 deletions

View File

@ -69,6 +69,7 @@ type Context struct {
Engine *Engine
Keys map[string]interface{}
Queue []interface{}
Errors errorMsgs
Accepted []string
}
@ -271,6 +272,25 @@ func (c *Context) Value(key interface{}) interface{} {
return c.Context.Value(key)
}
//Enqueue new item
func (c *Context) Enqueue(item interface{}) {
if c.Queue == nil {
c.Queue = []interface{}{}
}
c.Queue = append(c.Queue, item)
}
//Dequeue returns the value from top of the queue
func (c *Context) Dequeue () (interface{}, error) {
size := len(c.Queue)
if c.Queue == nil || size == 0 {
return nil, errors.New("Queue is empty")
}
result := c.Queue[size-1]
c.Queue = c.Queue[0:size-1]
return result, nil
}
/************************************/
/********* PARSING REQUEST **********/
/************************************/

View File

@ -91,6 +91,16 @@ func TestContextSetGetValues(t *testing.T) {
}
func TestContextQueue(t *testing.T) {
c, _, _ := createTestContext()
c.Enqueue("value")
c.Enqueue("data")
v, _ := c.Dequeue()
assert.Exactly(t, v, "data")
v2, _ := c.Dequeue()
assert.Exactly(t, v2, "value")
}
func TestContextCopy(t *testing.T) {
c, _, _ := createTestContext()
c.index = 2