Repository: qpid-dispatch
Updated Branches:
  refs/heads/master 456f618d8 -> 6a783b07f


http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/6a783b07/src/router_core/router_core.c
----------------------------------------------------------------------
diff --git a/src/router_core/router_core.c b/src/router_core/router_core.c
index 07b7035..89d8960 100644
--- a/src/router_core/router_core.c
+++ b/src/router_core/router_core.c
@@ -136,13 +136,13 @@ qdr_field_t *qdr_field(const char *text)
         DEQ_INSERT_TAIL(field->buffers, buf);
     }
 
-    field->iterator = qd_field_iterator_buffer(DEQ_HEAD(field->buffers), 0, 
ilength);
+    field->iterator = qd_iterator_buffer(DEQ_HEAD(field->buffers), 0, ilength, 
ITER_VIEW_ALL);
 
     return field;
 }
 
 
-qdr_field_t *qdr_field_from_iter(qd_field_iterator_t *iter)
+qdr_field_t *qdr_field_from_iter(qd_iterator_t *iter)
 {
     if (!iter)
         return 0;
@@ -153,24 +153,24 @@ qdr_field_t *qdr_field_from_iter(qd_field_iterator_t 
*iter)
     int          length;
 
     ZERO(field);
-    qd_field_iterator_reset(iter);
-    remaining = qd_field_iterator_remaining(iter);
+    qd_iterator_reset(iter);
+    remaining = qd_iterator_remaining(iter);
     length    = remaining;
     while (remaining) {
         buf = qd_buffer();
         size_t cap    = qd_buffer_capacity(buf);
-        int    copied = qd_field_iterator_ncopy(iter, qd_buffer_cursor(buf), 
cap);
+        int    copied = qd_iterator_ncopy(iter, qd_buffer_cursor(buf), cap);
         qd_buffer_insert(buf, copied);
         DEQ_INSERT_TAIL(field->buffers, buf);
-        remaining = qd_field_iterator_remaining(iter);
+        remaining = qd_iterator_remaining(iter);
     }
 
-    field->iterator = qd_field_iterator_buffer(DEQ_HEAD(field->buffers), 0, 
length);
+    field->iterator = qd_iterator_buffer(DEQ_HEAD(field->buffers), 0, length, 
ITER_VIEW_ALL);
 
     return field;
 }
 
-qd_field_iterator_t *qdr_field_iterator(qdr_field_t *field)
+qd_iterator_t *qdr_field_iterator(qdr_field_t *field)
 {
     if (!field)
         return 0;
@@ -182,7 +182,7 @@ qd_field_iterator_t *qdr_field_iterator(qdr_field_t *field)
 void qdr_field_free(qdr_field_t *field)
 {
     if (field) {
-        qd_field_iterator_free(field->iterator);
+        qd_iterator_free(field->iterator);
         qd_buffer_list_free_buffers(&field->buffers);
         free_qdr_field_t(field);
     }
@@ -194,7 +194,7 @@ char *qdr_field_copy(qdr_field_t *field)
     if (!field || !field->iterator)
         return 0;
 
-    return (char*) qd_field_iterator_copy(field->iterator);
+    return (char*) qd_iterator_copy(field->iterator);
 }
 
 
@@ -230,12 +230,12 @@ qdr_address_t *qdr_address_CT(qdr_core_t *core, 
qd_address_treatment_t treatment
 
 qdr_address_t *qdr_add_local_address_CT(qdr_core_t *core, char aclass, const 
char *address, qd_address_treatment_t treatment)
 {
-    char                 addr_string[1000];
-    qdr_address_t       *addr = 0;
-    qd_field_iterator_t *iter = 0;
+    char           addr_string[1000];
+    qdr_address_t *addr = 0;
+    qd_iterator_t *iter = 0;
 
     snprintf(addr_string, sizeof(addr_string), "%c%s", aclass, address);
-    iter = qd_address_iterator_string(addr_string, ITER_VIEW_ALL);
+    iter = qd_iterator_string(addr_string, ITER_VIEW_ALL);
 
     qd_hash_retrieve(core->addr_hash, iter, (void**) &addr);
     if (!addr) {
@@ -246,7 +246,7 @@ qdr_address_t *qdr_add_local_address_CT(qdr_core_t *core, 
char aclass, const cha
         addr->block_deletion = true;
         addr->local = (aclass == 'L');
     }
-    qd_field_iterator_free(iter);
+    qd_iterator_free(iter);
     return addr;
 }
 

http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/6a783b07/src/router_core/router_core_private.h
----------------------------------------------------------------------
diff --git a/src/router_core/router_core_private.h 
b/src/router_core/router_core_private.h
index f8e702f..24c76b9 100644
--- a/src/router_core/router_core_private.h
+++ b/src/router_core/router_core_private.h
@@ -56,13 +56,13 @@ typedef enum {
  *               and out of the router-core thread.
  */
 typedef struct {
-    qd_buffer_list_t     buffers;
-    qd_field_iterator_t *iterator;
+    qd_buffer_list_t  buffers;
+    qd_iterator_t    *iterator;
 } qdr_field_t;
 
 qdr_field_t *qdr_field(const char *string);
-qdr_field_t *qdr_field_from_iter(qd_field_iterator_t *iter);
-qd_field_iterator_t *qdr_field_iterator(qdr_field_t *field);
+qdr_field_t *qdr_field_from_iter(qd_iterator_t *iter);
+qd_iterator_t *qdr_field_iterator(qdr_field_t *field);
 void qdr_field_free(qdr_field_t *field);
 char *qdr_field_copy(qdr_field_t *field);
 
@@ -208,8 +208,8 @@ struct qdr_delivery_t {
     qdr_link_t          *link;
     qdr_delivery_t      *peer;
     qd_message_t        *msg;
-    qd_field_iterator_t *to_addr;
-    qd_field_iterator_t *origin;
+    qd_iterator_t       *to_addr;
+    qd_iterator_t       *origin;
     uint64_t             disposition;
     bool                 settled;
     bool                 presettled;
@@ -624,8 +624,8 @@ void qdr_check_addr_CT(qdr_core_t *core, qdr_address_t 
*addr, bool was_local);
 qdr_delivery_t *qdr_forward_new_delivery_CT(qdr_core_t *core, qdr_delivery_t 
*peer, qdr_link_t *link, qd_message_t *msg);
 void qdr_forward_deliver_CT(qdr_core_t *core, qdr_link_t *link, qdr_delivery_t 
*dlv);
 void qdr_connection_activate_CT(qdr_core_t *core, qdr_connection_t *conn);
-qd_address_treatment_t qdr_treatment_for_address_CT(qdr_core_t *core, 
qd_field_iterator_t *iter, int *in_phase, int *out_phase);
-qd_address_treatment_t qdr_treatment_for_address_hash_CT(qdr_core_t *core, 
qd_field_iterator_t *iter);
+qd_address_treatment_t qdr_treatment_for_address_CT(qdr_core_t *core, 
qd_iterator_t *iter, int *in_phase, int *out_phase);
+qd_address_treatment_t qdr_treatment_for_address_hash_CT(qdr_core_t *core, 
qd_iterator_t *iter);
 
 void qdr_connection_enqueue_work_CT(qdr_core_t            *core,
                                     qdr_connection_t      *conn,

http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/6a783b07/src/router_core/terminus.c
----------------------------------------------------------------------
diff --git a/src/router_core/terminus.c b/src/router_core/terminus.c
index 4dbba75..114d736 100644
--- a/src/router_core/terminus.c
+++ b/src/router_core/terminus.c
@@ -87,8 +87,8 @@ void qdr_terminus_copy(qdr_terminus_t *from, pn_terminus_t 
*to)
         return;
 
     if (from->address) {
-        qd_address_iterator_reset_view(from->address->iterator, ITER_VIEW_ALL);
-        unsigned char *addr = qd_field_iterator_copy(from->address->iterator);
+        qd_iterator_reset_view(from->address->iterator, ITER_VIEW_ALL);
+        unsigned char *addr = qd_iterator_copy(from->address->iterator);
         pn_terminus_set_address(to, (char*) addr);
         free(addr);
     }
@@ -146,7 +146,7 @@ void qdr_terminus_set_address(qdr_terminus_t *term, const 
char *addr)
 }
 
 
-qd_field_iterator_t *qdr_terminus_get_address(qdr_terminus_t *term)
+qd_iterator_t *qdr_terminus_get_address(qdr_terminus_t *term)
 {
     if (qdr_terminus_is_anonymous(term))
         return 0;
@@ -155,7 +155,7 @@ qd_field_iterator_t 
*qdr_terminus_get_address(qdr_terminus_t *term)
 }
 
 
-qd_field_iterator_t *qdr_terminus_dnp_address(qdr_terminus_t *term)
+qd_iterator_t *qdr_terminus_dnp_address(qdr_terminus_t *term)
 {
     pn_data_t *props = term->properties;
 
@@ -169,7 +169,7 @@ qd_field_iterator_t 
*qdr_terminus_dnp_address(qdr_terminus_t *term)
             if (pn_data_next(props)) {
                 pn_bytes_t val = pn_data_get_string(props);
                 if (val.start && *val.start != '\0')
-                    return qd_field_iterator_binary(val.start, val.size);
+                    return qd_iterator_binary(val.start, val.size, 
ITER_VIEW_ALL);
             }
         }
     }

http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/6a783b07/src/router_core/transfer.c
----------------------------------------------------------------------
diff --git a/src/router_core/transfer.c b/src/router_core/transfer.c
index 00ec719..0ef54f1 100644
--- a/src/router_core/transfer.c
+++ b/src/router_core/transfer.c
@@ -37,7 +37,7 @@ static void qdr_update_delivery_CT(qdr_core_t *core, 
qdr_action_t *action, bool
 // Interface Functions
 
//==================================================================================
 
-qdr_delivery_t *qdr_link_deliver(qdr_link_t *link, qd_message_t *msg, 
qd_field_iterator_t *ingress,
+qdr_delivery_t *qdr_link_deliver(qdr_link_t *link, qd_message_t *msg, 
qd_iterator_t *ingress,
                                  bool settled, qd_bitmask_t *link_exclusion)
 {
     qdr_action_t   *action = qdr_action(qdr_link_deliver_CT, "link_deliver");
@@ -60,7 +60,7 @@ qdr_delivery_t *qdr_link_deliver(qdr_link_t *link, 
qd_message_t *msg, qd_field_i
 
 
 qdr_delivery_t *qdr_link_deliver_to(qdr_link_t *link, qd_message_t *msg,
-                                    qd_field_iterator_t *ingress, 
qd_field_iterator_t *addr,
+                                    qd_iterator_t *ingress, qd_iterator_t 
*addr,
                                     bool settled, qd_bitmask_t *link_exclusion)
 {
     qdr_action_t   *action = qdr_action(qdr_link_deliver_CT, "link_deliver");
@@ -196,7 +196,7 @@ void qdr_link_check_credit(qdr_core_t *core, qdr_link_t 
*link)
 }
 
 
-void qdr_send_to1(qdr_core_t *core, qd_message_t *msg, qd_field_iterator_t 
*addr, bool exclude_inprocess, bool control)
+void qdr_send_to1(qdr_core_t *core, qd_message_t *msg, qd_iterator_t *addr, 
bool exclude_inprocess, bool control)
 {
     qdr_action_t *action = qdr_action(qdr_send_to_CT, "send_to");
     action->args.io.address           = qdr_field_from_iter(addr);
@@ -278,7 +278,7 @@ static void qdr_delivery_decref_internal(qdr_delivery_t 
*delivery, bool lock_hel
             qd_message_free(delivery->msg);
 
         if (delivery->to_addr)
-            qd_field_iterator_free(delivery->to_addr);
+            qd_iterator_free(delivery->to_addr);
 
         if (delivery->tracking_addr) {
             int link_bit = conn->mask_bit;
@@ -640,7 +640,7 @@ static void qdr_send_to_CT(qdr_core_t *core, qdr_action_t 
*action, bool discard)
     if (!discard) {
         qdr_address_t *addr = 0;
 
-        qd_address_iterator_reset_view(addr_field->iterator, 
ITER_VIEW_ADDRESS_HASH);
+        qd_iterator_reset_view(addr_field->iterator, ITER_VIEW_ADDRESS_HASH);
         qd_hash_retrieve(core->addr_hash, addr_field->iterator, (void**) 
&addr);
         if (addr) {
             //

http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/6a783b07/src/router_node.c
----------------------------------------------------------------------
diff --git a/src/router_node.c b/src/router_node.c
index 0944989..d35ea3f 100644
--- a/src/router_node.c
+++ b/src/router_node.c
@@ -87,13 +87,13 @@ static int AMQP_writable_conn_handler(void *type_context, 
qd_connection_t *conn,
 }
 
 
-static qd_field_iterator_t *router_annotate_message(qd_router_t       *router,
-                                                    qd_parsed_field_t *in_ma,
-                                                    qd_message_t      *msg,
-                                                    qd_bitmask_t     
**link_exclusions,
-                                                    bool               
strip_inbound_annotations)
+static qd_iterator_t *router_annotate_message(qd_router_t       *router,
+                                              qd_parsed_field_t *in_ma,
+                                              qd_message_t      *msg,
+                                              qd_bitmask_t     
**link_exclusions,
+                                              bool               
strip_inbound_annotations)
 {
-    qd_field_iterator_t *ingress_iter = 0;
+    qd_iterator_t *ingress_iter = 0;
 
     qd_parsed_field_t *trace   = 0;
     qd_parsed_field_t *ingress = 0;
@@ -110,17 +110,17 @@ static qd_field_iterator_t 
*router_annotate_message(qd_router_t       *router,
             qd_parsed_field_t *sub  = qd_parse_sub_key(in_ma, idx);
             if (!sub)
                 continue;
-            qd_field_iterator_t *iter = qd_parse_raw(sub);
+            qd_iterator_t *iter = qd_parse_raw(sub);
             if (!iter)
                 continue;
 
-            if        (qd_field_iterator_equal(iter, (unsigned char*) 
QD_MA_TRACE)) {
+            if        (qd_iterator_equal(iter, (unsigned char*) QD_MA_TRACE)) {
                 trace = qd_parse_sub_value(in_ma, idx);
-            } else if (qd_field_iterator_equal(iter, (unsigned char*) 
QD_MA_INGRESS)) {
+            } else if (qd_iterator_equal(iter, (unsigned char*) 
QD_MA_INGRESS)) {
                 ingress = qd_parse_sub_value(in_ma, idx);
-            } else if (qd_field_iterator_equal(iter, (unsigned char*) 
QD_MA_TO)) {
+            } else if (qd_iterator_equal(iter, (unsigned char*) QD_MA_TO)) {
                 to = qd_parse_sub_value(in_ma, idx);
-            } else if (qd_field_iterator_equal(iter, (unsigned char*) 
QD_MA_PHASE)) {
+            } else if (qd_iterator_equal(iter, (unsigned char*) QD_MA_PHASE)) {
                 phase = qd_parse_sub_value(in_ma, idx);
             }
             done = trace && ingress && to && phase;
@@ -149,8 +149,8 @@ static qd_field_iterator_t 
*router_annotate_message(qd_router_t       *router,
             uint32_t idx = 0;
             qd_parsed_field_t *trace_item = qd_parse_sub_value(trace, idx);
             while (trace_item) {
-                qd_field_iterator_t *iter = qd_parse_raw(trace_item);
-                qd_address_iterator_reset_view(iter, ITER_VIEW_ALL);
+                qd_iterator_t *iter = qd_parse_raw(trace_item);
+                qd_iterator_reset_view(iter, ITER_VIEW_ALL);
                 qd_compose_insert_string_iterator(trace_field, iter);
                 idx++;
                 trace_item = qd_parse_sub_value(trace, idx);
@@ -289,33 +289,33 @@ static void AMQP_rx_handler(void* context, qd_link_t 
*link, pn_delivery_t *pnd)
     if (valid_message) {
         if (check_user) {
             // This connection must not allow proxied user_id
-            qd_field_iterator_t *userid_iter  = qd_message_field_iterator(msg, 
QD_FIELD_USER_ID);
+            qd_iterator_t *userid_iter  = qd_message_field_iterator(msg, 
QD_FIELD_USER_ID);
             if (userid_iter) {
                 // The user_id property has been specified
-                if (qd_field_iterator_remaining(userid_iter) > 0) {
+                if (qd_iterator_remaining(userid_iter) > 0) {
                     // user_id property in message is not blank
-                    if (!qd_field_iterator_equal(userid_iter, (const unsigned 
char *)conn->user_id)) {
+                    if (!qd_iterator_equal(userid_iter, (const unsigned char 
*)conn->user_id)) {
                         // This message is rejected: attempted user proxy is 
disallowed
                         qd_log(router->log_source, QD_LOG_DEBUG, "Message 
rejected due to user_id proxy violation. User:%s", conn->user_id);
                         pn_link_flow(pn_link, 1);
                         pn_delivery_update(pnd, PN_REJECTED);
                         pn_delivery_settle(pnd);
                         qd_message_free(msg);
-                        qd_field_iterator_free(userid_iter);
+                        qd_iterator_free(userid_iter);
                         return;
                     }
                 }
-                qd_field_iterator_free(userid_iter);
+                qd_iterator_free(userid_iter);
             }
         }
 
         qd_parsed_field_t   *in_ma        = 
qd_message_message_annotations(msg);
         qd_bitmask_t        *link_exclusions;
         bool                 strip        = 
qdr_link_strip_annotations_in(rlink);
-        qd_field_iterator_t *ingress_iter = router_annotate_message(router, 
in_ma, msg, &link_exclusions, strip);
+        qd_iterator_t *ingress_iter = router_annotate_message(router, in_ma, 
msg, &link_exclusions, strip);
 
         if (anonymous_link) {
-            qd_field_iterator_t *addr_iter = 0;
+            qd_iterator_t *addr_iter = 0;
             int phase = 0;
             
             //
@@ -324,7 +324,7 @@ static void AMQP_rx_handler(void* context, qd_link_t *link, 
pn_delivery_t *pnd)
             if (in_ma) {
                 qd_parsed_field_t *ma_to = qd_parse_value_by_key(in_ma, 
QD_MA_TO);
                 if (ma_to) {
-                    addr_iter = qd_field_iterator_dup(qd_parse_raw(ma_to));
+                    addr_iter = qd_iterator_dup(qd_parse_raw(ma_to));
                     phase = qd_message_get_phase_annotation(msg);
                 }
             }
@@ -336,9 +336,9 @@ static void AMQP_rx_handler(void* context, qd_link_t *link, 
pn_delivery_t *pnd)
                 addr_iter = qd_message_field_iterator(msg, QD_FIELD_TO);
 
             if (addr_iter) {
-                qd_address_iterator_reset_view(addr_iter, 
ITER_VIEW_ADDRESS_HASH);
+                qd_iterator_reset_view(addr_iter, ITER_VIEW_ADDRESS_HASH);
                 if (phase > 0)
-                    qd_address_iterator_set_phase(addr_iter, '0' + (char) 
phase);
+                    qd_iterator_annotate_phase(addr_iter, '0' + (char) phase);
                 delivery = qdr_link_deliver_to(rlink, msg, ingress_iter, 
addr_iter, pn_delivery_settled(pnd),
                                                link_exclusions);
             }
@@ -695,7 +695,7 @@ qd_router_t *qd_router(qd_dispatch_t *qd, qd_router_mode_t 
mode, const char *are
     // Inform the field iterator module of this router's id and area.  The 
field iterator
     // uses this to offload some of the address-processing load from the 
router.
     //
-    qd_field_iterator_set_address(area, id);
+    qd_iterator_set_address(area, id);
 
     //
     // Seed the random number generator

http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/6a783b07/src/trace_mask.c
----------------------------------------------------------------------
diff --git a/src/trace_mask.c b/src/trace_mask.c
index e1acff5..7fc9882 100644
--- a/src/trace_mask.c
+++ b/src/trace_mask.c
@@ -67,7 +67,7 @@ void qd_tracemask_free(qd_tracemask_t *tm)
 
 void qd_tracemask_add_router(qd_tracemask_t *tm, const char *address, int 
maskbit)
 {
-    qd_field_iterator_t *iter = qd_address_iterator_string(address, 
ITER_VIEW_ADDRESS_HASH);
+    qd_iterator_t *iter = qd_iterator_string(address, ITER_VIEW_ADDRESS_HASH);
     sys_rwlock_wrlock(tm->lock);
     assert(maskbit < qd_bitmask_width() && tm->router_by_mask_bit[maskbit] == 
0);
     if (maskbit < qd_bitmask_width() && tm->router_by_mask_bit[maskbit] == 0) {
@@ -78,7 +78,7 @@ void qd_tracemask_add_router(qd_tracemask_t *tm, const char 
*address, int maskbi
         tm->router_by_mask_bit[maskbit] = router;
     }
     sys_rwlock_unlock(tm->lock);
-    qd_field_iterator_free(iter);
+    qd_iterator_free(iter);
 }
 
 
@@ -133,8 +133,8 @@ qd_bitmask_t *qd_tracemask_create(qd_tracemask_t *tm, 
qd_parsed_field_t *traceli
     qd_parsed_field_t *item   = qd_parse_sub_value(tracelist, idx);
     qdtm_router_t     *router = 0;
     while (item) {
-        qd_field_iterator_t *iter = qd_parse_raw(item);
-        qd_address_iterator_reset_view(iter, ITER_VIEW_NODE_HASH);
+        qd_iterator_t *iter = qd_parse_raw(item);
+        qd_iterator_reset_view(iter, ITER_VIEW_NODE_HASH);
         qd_hash_retrieve(tm->hash, iter, (void*) &router);
         if (router && router->link_maskbit >= 0)
             qd_bitmask_set_bit(bm, router->link_maskbit);

http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/6a783b07/tests/CMakeLists.txt
----------------------------------------------------------------------
diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt
index 6bc0e74..d70ccbc 100644
--- a/tests/CMakeLists.txt
+++ b/tests/CMakeLists.txt
@@ -27,7 +27,6 @@ include_directories(
 ##
 set(unit_test_SOURCES
     compose_test.c
-    parse_test.c
     policy_test.c
     run_unit_tests.c
     server_test.c
@@ -43,6 +42,7 @@ target_link_libraries(unit_tests qpid-dispatch)
 
 set(unit_test_size_SOURCES
     field_test.c
+    parse_test.c
     message_test.c
     buffer_test.c
     run_unit_tests_size.c

http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/6a783b07/tests/field_test.c
----------------------------------------------------------------------
diff --git a/tests/field_test.c b/tests/field_test.c
index bc93a27..82e512b 100644
--- a/tests/field_test.c
+++ b/tests/field_test.c
@@ -55,27 +55,19 @@ static void release_buffer_chain(qd_buffer_list_t *chain)
 
 static char* test_view_global_dns(void *context)
 {
-    qd_field_iterator_t *iter = 
qd_address_iterator_string("amqp://host/global/sub", ITER_VIEW_ALL);
-    if (!qd_field_iterator_equal(iter, (unsigned char*) 
"amqp://host/global/sub"))
+    qd_iterator_t *iter = qd_iterator_string("amqp://host/global/sub", 
ITER_VIEW_ALL);
+    if (!qd_iterator_equal(iter, (unsigned char*) "amqp://host/global/sub"))
         return "ITER_VIEW_ALL failed";
 
-    qd_address_iterator_reset_view(iter, ITER_VIEW_NO_HOST);
-    if (!qd_field_iterator_equal(iter, (unsigned char*) "global/sub"))
-        return "ITER_VIEW_NO_HOST failed";
+    qd_iterator_reset_view(iter, ITER_VIEW_ADDRESS_NO_HOST);
+    if (!qd_iterator_equal(iter, (unsigned char*) "global/sub"))
+        return "ITER_VIEW_ADDRESS_NO_HOST failed";
 
-    qd_address_iterator_reset_view(iter, ITER_VIEW_NODE_ID);
-    if (!qd_field_iterator_equal(iter, (unsigned char*) "global"))
-        return "ITER_VIEW_NODE_ID failed";
-
-    qd_address_iterator_reset_view(iter, ITER_VIEW_NODE_SPECIFIC);
-    if (!qd_field_iterator_equal(iter, (unsigned char*) "sub"))
-        return "ITER_VIEW_NODE_SPECIFIC failed";
-
-    qd_address_iterator_reset_view(iter, ITER_VIEW_ADDRESS_HASH);
-    if (!qd_field_iterator_equal(iter, (unsigned char*) "M0global/sub"))
+    qd_iterator_reset_view(iter, ITER_VIEW_ADDRESS_HASH);
+    if (!qd_iterator_equal(iter, (unsigned char*) "M0global/sub"))
         return "ITER_VIEW_ADDRESS_HASH failed";
 
-    qd_field_iterator_free(iter);
+    qd_iterator_free(iter);
 
     return 0;
 }
@@ -83,27 +75,19 @@ static char* test_view_global_dns(void *context)
 
 static char* test_view_global_non_dns(void *context)
 {
-    qd_field_iterator_t *iter = qd_address_iterator_string("amqp:/global/sub", 
ITER_VIEW_ALL);
-    if (!qd_field_iterator_equal(iter, (unsigned char*) "amqp:/global/sub"))
+    qd_iterator_t *iter = qd_iterator_string("amqp:/global/sub", 
ITER_VIEW_ALL);
+    if (!qd_iterator_equal(iter, (unsigned char*) "amqp:/global/sub"))
         return "ITER_VIEW_ALL failed";
 
-    qd_address_iterator_reset_view(iter, ITER_VIEW_NO_HOST);
-    if (!qd_field_iterator_equal(iter, (unsigned char*) "global/sub"))
-        return "ITER_VIEW_NO_HOST failed";
-
-    qd_address_iterator_reset_view(iter, ITER_VIEW_NODE_ID);
-    if (!qd_field_iterator_equal(iter, (unsigned char*) "global"))
-        return "ITER_VIEW_NODE_ID failed";
+    qd_iterator_reset_view(iter, ITER_VIEW_ADDRESS_NO_HOST);
+    if (!qd_iterator_equal(iter, (unsigned char*) "global/sub"))
+        return "ITER_VIEW_ADDRESS_NO_HOST failed";
 
-    qd_address_iterator_reset_view(iter, ITER_VIEW_NODE_SPECIFIC);
-    if (!qd_field_iterator_equal(iter, (unsigned char*) "sub"))
-        return "ITER_VIEW_NODE_SPECIFIC failed";
-
-    qd_address_iterator_reset_view(iter, ITER_VIEW_ADDRESS_HASH);
-    if (!qd_field_iterator_equal(iter, (unsigned char*) "M0global/sub"))
+    qd_iterator_reset_view(iter, ITER_VIEW_ADDRESS_HASH);
+    if (!qd_iterator_equal(iter, (unsigned char*) "M0global/sub"))
         return "ITER_VIEW_ADDRESS_HASH failed";
 
-    qd_field_iterator_free(iter);
+    qd_iterator_free(iter);
 
     return 0;
 }
@@ -111,27 +95,19 @@ static char* test_view_global_non_dns(void *context)
 
 static char* test_view_global_no_host(void *context)
 {
-    qd_field_iterator_t *iter = qd_address_iterator_string("global/sub", 
ITER_VIEW_ALL);
-    if (!qd_field_iterator_equal(iter, (unsigned char*) "global/sub"))
+    qd_iterator_t *iter = qd_iterator_string("global/sub", ITER_VIEW_ALL);
+    if (!qd_iterator_equal(iter, (unsigned char*) "global/sub"))
         return "ITER_VIEW_ALL failed";
 
-    qd_address_iterator_reset_view(iter, ITER_VIEW_NO_HOST);
-    if (!qd_field_iterator_equal(iter, (unsigned char*) "global/sub"))
-        return "ITER_VIEW_NO_HOST failed";
-
-    qd_address_iterator_reset_view(iter, ITER_VIEW_NODE_ID);
-    if (!qd_field_iterator_equal(iter, (unsigned char*) "global"))
-        return "ITER_VIEW_NODE_ID failed";
-
-    qd_address_iterator_reset_view(iter, ITER_VIEW_NODE_SPECIFIC);
-    if (!qd_field_iterator_equal(iter, (unsigned char*) "sub"))
-        return "ITER_VIEW_NODE_SPECIFIC failed";
+    qd_iterator_reset_view(iter, ITER_VIEW_ADDRESS_NO_HOST);
+    if (!qd_iterator_equal(iter, (unsigned char*) "global/sub"))
+        return "ITER_VIEW_ADDRESS_NO_HOST failed";
 
-    qd_address_iterator_reset_view(iter, ITER_VIEW_ADDRESS_HASH);
-    if (!qd_field_iterator_equal(iter, (unsigned char*) "M0global/sub"))
+    qd_iterator_reset_view(iter, ITER_VIEW_ADDRESS_HASH);
+    if (!qd_iterator_equal(iter, (unsigned char*) "M0global/sub"))
         return "ITER_VIEW_ADDRESS_HASH failed";
 
-    qd_field_iterator_free(iter);
+    qd_iterator_free(iter);
 
     return 0;
 }
@@ -139,38 +115,102 @@ static char* test_view_global_no_host(void *context)
 
 static char* test_view_global_no_host_slash(void *context)
 {
-    qd_field_iterator_t *iter = qd_address_iterator_string("/global/sub", 
ITER_VIEW_ALL);
-    if (!qd_field_iterator_equal(iter, (unsigned char*) "/global/sub"))
+    qd_iterator_t *iter = qd_iterator_string("/global/sub", ITER_VIEW_ALL);
+    if (!qd_iterator_equal(iter, (unsigned char*) "/global/sub"))
         return "ITER_VIEW_ALL failed";
 
-    qd_address_iterator_reset_view(iter, ITER_VIEW_NO_HOST);
-    if (!qd_field_iterator_equal(iter, (unsigned char*) "global/sub"))
-        return "ITER_VIEW_NO_HOST failed";
+    qd_iterator_reset_view(iter, ITER_VIEW_ADDRESS_NO_HOST);
+    if (!qd_iterator_equal(iter, (unsigned char*) "global/sub"))
+        return "ITER_VIEW_ADDRESS_NO_HOST failed";
 
-    qd_address_iterator_reset_view(iter, ITER_VIEW_NODE_ID);
-    if (!qd_field_iterator_equal(iter, (unsigned char*) "global"))
-        return "ITER_VIEW_NODE_ID failed";
+    qd_iterator_reset_view(iter, ITER_VIEW_ADDRESS_HASH);
+    if (!qd_iterator_equal(iter, (unsigned char*) "M0global/sub"))
+        return "ITER_VIEW_ADDRESS_HASH failed";
 
-    qd_address_iterator_reset_view(iter, ITER_VIEW_NODE_SPECIFIC);
-    if (!qd_field_iterator_equal(iter, (unsigned char*) "sub"))
-        return "ITER_VIEW_NODE_SPECIFIC failed";
+    qd_iterator_free(iter);
 
-    qd_address_iterator_reset_view(iter, ITER_VIEW_ADDRESS_HASH);
-    if (!qd_field_iterator_equal(iter, (unsigned char*) "M0global/sub"))
-        return "ITER_VIEW_ADDRESS_HASH failed";
+    return 0;
+}
 
-    qd_field_iterator_free(iter);
 
+static char *test_trim(void *context)
+{
+    qd_iterator_t *iter = qd_iterator_string("testing.trim", ITER_VIEW_ALL);
+
+    qd_iterator_trim_view(iter, 7);
+    if (!qd_iterator_equal(iter, (unsigned char*) "testing"))
+        return "Trim on ITER_VIEW_ALL failed (1)";
+
+    qd_iterator_reset_view(iter, ITER_VIEW_ALL);
+    if (!qd_iterator_equal(iter, (unsigned char*) "testing.trim"))
+        return "Trim on ITER_VIEW_ALL failed (2)";
+
+    qd_iterator_advance(iter, 4);
+    qd_iterator_trim_view(iter, 5);
+    if (!qd_iterator_equal(iter, (unsigned char*) "ing.t"))
+        return "Trim on ITER_VIEW_ALL failed (3)";
+
+    qd_iterator_reset_view(iter, ITER_VIEW_ADDRESS_HASH);
+    qd_iterator_trim_view(iter, 9);
+    if (!qd_iterator_equal(iter, (unsigned char*) "M0testing"))
+        return "Trim on ITER_VIEW_ADDRESS_HASH failed";
+
+    qd_iterator_reset(iter);
+    qd_iterator_annotate_space(iter, "my_space.", 9);
+    qd_iterator_trim_view(iter, 18);
+    if (!qd_iterator_equal(iter, (unsigned char*) "M0my_space.testing"))
+        return "Trim on ITER_VIEW_ADDRESS_HASH (with space 1) failed";
+
+    qd_iterator_reset(iter);
+    qd_iterator_trim_view(iter, 10);
+    if (!qd_iterator_equal(iter, (unsigned char*) "M0my_space"))
+        return "Trim on ITER_VIEW_ADDRESS_HASH (in space 1) failed";
+
+    qd_iterator_reset(iter);
+    qd_iterator_trim_view(iter, 2);
+    if (!qd_iterator_equal(iter, (unsigned char*) "M0"))
+        return "Trim on ITER_VIEW_ADDRESS_HASH (in annotation 1) failed";
+
+    qd_iterator_reset(iter);
+    qd_iterator_trim_view(iter, 1);
+    if (!qd_iterator_equal(iter, (unsigned char*) "M"))
+        return "Trim on ITER_VIEW_ADDRESS_HASH (in annotation 2) failed";
+
+    qd_iterator_free(iter);
     return 0;
 }
 
 
-static char* view_address_hash(void *context, qd_field_iterator_t *iter,
+static char *test_sub_iterator(void *context)
+{
+    qd_iterator_t *iter = qd_iterator_string("test_sub_iterator", 
ITER_VIEW_ALL);
+    qd_iterator_t *sub1 = qd_iterator_sub(iter, qd_iterator_remaining(iter));
+    qd_iterator_advance(iter, 5);
+    qd_iterator_t *sub2 = qd_iterator_sub(iter, qd_iterator_remaining(iter));
+    qd_iterator_t *sub3 = qd_iterator_sub(iter, 3);
+
+    if (!qd_iterator_equal(sub1, (unsigned char*) "test_sub_iterator"))
+        return "Sub Iterator failed - 1";
+    if (!qd_iterator_equal(sub2, (unsigned char*) "sub_iterator"))
+        return "Sub Iterator failed - 2";
+    if (!qd_iterator_equal(sub3, (unsigned char*) "sub"))
+        return "Sub Iterator failed - 3";
+
+    qd_iterator_free(iter);
+    qd_iterator_free(sub1);
+    qd_iterator_free(sub2);
+    qd_iterator_free(sub3);
+
+    return 0;
+}
+
+
+static char* view_address_hash(void *context, qd_iterator_t *iter,
                                const char *addr, const char *view)
 {
-    qd_address_iterator_set_phase(iter, '1');
-    if (!qd_field_iterator_equal(iter, (unsigned char*) view)) {
-        char *got = (char*) qd_field_iterator_copy(iter);
+    qd_iterator_annotate_phase(iter, '1');
+    if (!qd_iterator_equal(iter, (unsigned char*) view)) {
+        char *got = (char*) qd_iterator_copy(iter);
         snprintf(fail_text, FAIL_TEXT_SIZE, "Addr '%s' failed.  Expected '%s', 
got '%s'",
                  addr, view, got);
         return fail_text;
@@ -219,9 +259,9 @@ static char* test_view_address_hash(void *context)
     int idx;
 
     for (idx = 0; cases[idx].addr; idx++) {
-        qd_field_iterator_t *iter = 
qd_address_iterator_string(cases[idx].addr, ITER_VIEW_ADDRESS_HASH);
+        qd_iterator_t *iter = qd_iterator_string(cases[idx].addr, 
ITER_VIEW_ADDRESS_HASH);
         char *ret = view_address_hash(context, iter, cases[idx].addr, 
cases[idx].view);
-        qd_field_iterator_free(iter);
+        qd_iterator_free(iter);
         if (ret) return ret;
     }
 
@@ -229,9 +269,9 @@ static char* test_view_address_hash(void *context)
         qd_buffer_list_t chain;
         DEQ_INIT(chain);
         build_buffer_chain(&chain, cases[idx].addr, 3);
-        qd_field_iterator_t *iter = 
qd_address_iterator_buffer(DEQ_HEAD(chain), 0,
-                                                               
strlen(cases[idx].addr),
-                                                               
ITER_VIEW_ADDRESS_HASH);
+        qd_iterator_t *iter = qd_iterator_buffer(DEQ_HEAD(chain), 0,
+                                                 strlen(cases[idx].addr),
+                                                 ITER_VIEW_ADDRESS_HASH);
         char *ret = view_address_hash(context, iter, cases[idx].addr, 
cases[idx].view);
         release_buffer_chain(&chain);
         if (ret) return ret;
@@ -253,15 +293,47 @@ static char* test_view_address_hash_override(void 
*context)
     int idx;
 
     for (idx = 0; cases[idx].addr; idx++) {
-        qd_field_iterator_t *iter = 
qd_address_iterator_string(cases[idx].addr, ITER_VIEW_ADDRESS_HASH);
-        qd_address_iterator_override_prefix(iter, 'C');
-        if (!qd_field_iterator_equal(iter, (unsigned char*) cases[idx].view)) {
-            char *got = (char*) qd_field_iterator_copy(iter);
+        qd_iterator_t *iter = qd_iterator_string(cases[idx].addr, 
ITER_VIEW_ADDRESS_HASH);
+        qd_iterator_annotate_prefix(iter, 'C');
+        if (!qd_iterator_equal(iter, (unsigned char*) cases[idx].view)) {
+            char *got = (char*) qd_iterator_copy(iter);
             snprintf(fail_text, FAIL_TEXT_SIZE, "Addr '%s' failed.  Expected 
'%s', got '%s'",
                      cases[idx].addr, cases[idx].view, got);
             return fail_text;
         }
-        qd_field_iterator_free(iter);
+        qd_iterator_free(iter);
+    }
+
+    return 0;
+}
+
+
+static char* test_view_address_with_space(void *context)
+{
+    struct {const char *addr; const char *view;} cases[] = {
+    {"amqp:/link-target",                    "M0test.vhost.link-target"},
+    {"amqp:/domain/link-target",             
"M0test.vhost.domain/link-target"},
+    {"domain/link-target",                   
"M0test.vhost.domain/link-target"},
+    {"bbc79fb3-e1fd-4a08-92b2-9a2de232b558", 
"M0test.vhost.bbc79fb3-e1fd-4a08-92b2-9a2de232b558"},
+    {0, 0}
+    };
+    int idx;
+
+    for (idx = 0; cases[idx].addr; idx++) {
+        qd_iterator_t *iter = qd_iterator_string(cases[idx].addr, 
ITER_VIEW_ADDRESS_HASH);
+        qd_iterator_annotate_space(iter, "test.vhost.", 11);
+        if (!qd_iterator_equal(iter, (unsigned char*) cases[idx].view)) {
+            char *got = (char*) qd_iterator_copy(iter);
+            snprintf(fail_text, FAIL_TEXT_SIZE, "Addr '%s' failed.  Expected 
'%s', got '%s'",
+                     cases[idx].addr, cases[idx].view, got);
+            return fail_text;
+        }
+        if (qd_iterator_length(iter) != strlen(cases[idx].view)) {
+            snprintf(fail_text, FAIL_TEXT_SIZE, "Addr '%s' failed.  Length %d, 
iter_length returned %d",
+                     cases[idx].addr, (int) strlen(cases[idx].view), (int) 
qd_iterator_length(iter));
+            return fail_text;
+        }
+        qd_iterator_free(iter);
     }
 
     return 0;
@@ -279,56 +351,55 @@ static char* test_view_node_hash(void *context)
     int idx;
 
     for (idx = 0; cases[idx].addr; idx++) {
-        qd_field_iterator_t *iter = 
qd_address_iterator_string(cases[idx].addr, ITER_VIEW_NODE_HASH);
-        if (!qd_field_iterator_equal(iter, (unsigned char*) cases[idx].view)) {
-            char *got = (char*) qd_field_iterator_copy(iter);
+        qd_iterator_t *iter = qd_iterator_string(cases[idx].addr, 
ITER_VIEW_NODE_HASH);
+        if (!qd_iterator_equal(iter, (unsigned char*) cases[idx].view)) {
+            char *got = (char*) qd_iterator_copy(iter);
             snprintf(fail_text, FAIL_TEXT_SIZE, "Addr '%s' failed.  Expected 
'%s', got '%s'",
                      cases[idx].addr, cases[idx].view, got);
             return fail_text;
-            qd_field_iterator_free(iter);
+            qd_iterator_free(iter);
         }
-        qd_field_iterator_free(iter);
+        qd_iterator_free(iter);
     }
 
     return 0;
 }
 
 static char *field_advance_test(void *context,
-                                qd_field_iterator_t *iter,
+                                qd_iterator_t *iter,
                                 const unsigned char *template,
                                 int increment)
 {
     const unsigned char *original = template;
     while (*template) {
-        // since qd_field_iterator_equal() resets the iterator to its original
+        // since qd_iterator_equal() resets the iterator to its original
         // view, we need to snapshot the iterator at the current point:
-        qd_field_iterator_t *raw = qd_field_iterator_sub(iter,
-                                                         
qd_field_iterator_remaining(iter));
-        if (!qd_field_iterator_equal(raw, (unsigned char*) template)) {
+        qd_iterator_t *raw = qd_iterator_sub(iter, 
qd_iterator_remaining(iter));
+        if (!qd_iterator_equal(raw, (unsigned char*) template)) {
 
             snprintf(fail_text, FAIL_TEXT_SIZE,
                      "Field advance failed.  Expected '%s'",
                      (char *)template );
             return fail_text;
         }
-        qd_field_iterator_advance(iter, increment);
+        qd_iterator_advance(iter, increment);
         template += increment;
-        qd_field_iterator_free(raw);
+        qd_iterator_free(raw);
     }
-    if (!qd_field_iterator_end(iter))
+    if (!qd_iterator_end(iter))
         return "Field advance to end failed";
 
-    qd_field_iterator_reset(iter);
-    if (!qd_field_iterator_equal(iter, (unsigned char*) original))
+    qd_iterator_reset(iter);
+    if (!qd_iterator_equal(iter, (unsigned char*) original))
         return "Field advance reset failed";
 
     // try something stupid:
-    qd_field_iterator_advance(iter, strlen((const char*)original) + 84);
+    qd_iterator_advance(iter, strlen((const char*)original) + 84);
     // expect no more data
-    if (qd_field_iterator_octet(iter) || !qd_field_iterator_end(iter))
+    if (qd_iterator_octet(iter) || !qd_iterator_end(iter))
         return "Field over advance failed";
 
-    qd_field_iterator_free(iter);
+    qd_iterator_free(iter);
     return 0;
 
 }
@@ -337,7 +408,7 @@ static char *field_advance_test(void *context,
 static char* test_field_advance_string(void *context)
 {
     const char *template = "abcdefghijklmnopqrstuvwxyz";
-    qd_field_iterator_t *iter = qd_field_iterator_string(template);
+    qd_iterator_t *iter = qd_iterator_string(template, ITER_VIEW_ALL);
     return field_advance_test(context, iter,
                               (const unsigned char*)template, 2);
 }
@@ -349,7 +420,7 @@ static char* test_field_advance_buffer(void *context)
     DEQ_INIT(chain);
     const unsigned char *template = (unsigned char *)"AAABBB";
     build_buffer_chain(&chain, (const char *)template, 3);
-    qd_field_iterator_t *iter = qd_field_iterator_buffer(DEQ_HEAD(chain), 0, 
6);
+    qd_iterator_t *iter = qd_iterator_buffer(DEQ_HEAD(chain), 0, 6, 
ITER_VIEW_ALL);
     char *ret = field_advance_test(context, iter, template, 1);
     release_buffer_chain(&chain);
     return ret;
@@ -358,8 +429,8 @@ static char* test_field_advance_buffer(void *context)
 static char *test_qd_hash_retrieve_prefix_separator(void *context)
 {
     qd_hash_t *hash = qd_hash(10, 32, 0);
-    qd_field_iterator_t *iter = 
qd_address_iterator_string("policy.org.apache", ITER_VIEW_ADDRESS_HASH);
-    qd_address_iterator_override_prefix(iter, 'C');
+    qd_iterator_t *iter = qd_iterator_string("policy.org.apache", 
ITER_VIEW_ADDRESS_HASH);
+    qd_iterator_annotate_prefix(iter, 'C');
 
     // Insert that hash
     qd_error_t error = qd_hash_insert(hash, iter, "TEST", 0);
@@ -370,15 +441,15 @@ static char *test_qd_hash_retrieve_prefix_separator(void 
*context)
 
     const char *taddr = "policy.org.apache.dev";
 
-    qd_field_iterator_t *address_iter = qd_address_iterator_string(taddr, 
ITER_VIEW_ADDRESS_HASH);
-    qd_address_iterator_override_prefix(address_iter, 'C');
+    qd_iterator_t *address_iter = qd_iterator_string(taddr, 
ITER_VIEW_ADDRESS_HASH);
+    qd_iterator_annotate_prefix(address_iter, 'C');
 
     qd_address_t *addr;
 
     qd_hash_retrieve_prefix(hash, address_iter, (void*) &addr);
 
-    qd_field_iterator_free(iter);
-    qd_field_iterator_free(address_iter);
+    qd_iterator_free(iter);
+    qd_iterator_free(address_iter);
 
     if(addr)
         return 0;
@@ -391,8 +462,8 @@ static char *test_qd_hash_retrieve_prefix(void *context)
 {
     qd_hash_t *hash = qd_hash(10, 32, 0);
 
-    qd_field_iterator_t *iter = qd_address_iterator_string("policy", 
ITER_VIEW_ADDRESS_HASH);
-    qd_address_iterator_override_prefix(iter, 'C');
+    qd_iterator_t *iter = qd_iterator_string("policy", ITER_VIEW_ADDRESS_HASH);
+    qd_iterator_annotate_prefix(iter, 'C');
 
     // Insert that hash
     qd_error_t error = qd_hash_insert(hash, iter, "TEST", 0);
@@ -403,15 +474,15 @@ static char *test_qd_hash_retrieve_prefix(void *context)
 
     const char *taddr = "policy.org.apache.dev";
 
-    qd_field_iterator_t *address_iter = qd_address_iterator_string(taddr, 
ITER_VIEW_ADDRESS_HASH);
-    qd_address_iterator_override_prefix(address_iter, 'C');
+    qd_iterator_t *address_iter = qd_iterator_string(taddr, 
ITER_VIEW_ADDRESS_HASH);
+    qd_iterator_annotate_prefix(address_iter, 'C');
 
     qd_address_t *addr;
 
     qd_hash_retrieve_prefix(hash, address_iter, (void*) &addr);
 
-    qd_field_iterator_free(iter);
-    qd_field_iterator_free(address_iter);
+    qd_iterator_free(iter);
+    qd_iterator_free(address_iter);
 
     if(addr)
         return 0;
@@ -425,8 +496,8 @@ static char *test_qd_hash_retrieve_prefix_no_match(void 
*context)
     qd_hash_t *hash = qd_hash(10, 32, 0);
 
     // No 'y' in policy. There should be no match.
-    qd_field_iterator_t *iter = qd_address_iterator_string("polic", 
ITER_VIEW_ADDRESS_HASH);
-    qd_address_iterator_override_prefix(iter, 'C');
+    qd_iterator_t *iter = qd_iterator_string("polic", ITER_VIEW_ADDRESS_HASH);
+    qd_iterator_annotate_prefix(iter, 'C');
 
     // Insert that hash
     qd_error_t error = qd_hash_insert(hash, iter, "TEST", 0);
@@ -437,15 +508,15 @@ static char *test_qd_hash_retrieve_prefix_no_match(void 
*context)
 
     const char *taddr = "policy.org.apache.dev";
 
-    qd_field_iterator_t *address_iter = qd_address_iterator_string(taddr, 
ITER_VIEW_ADDRESS_HASH);
-    qd_address_iterator_override_prefix(address_iter, 'C');
+    qd_iterator_t *address_iter = qd_iterator_string(taddr, 
ITER_VIEW_ADDRESS_HASH);
+    qd_iterator_annotate_prefix(address_iter, 'C');
 
     qd_address_t *addr;
 
     qd_hash_retrieve_prefix(hash, address_iter, (void*) &addr);
 
-    qd_field_iterator_free(iter);
-    qd_field_iterator_free(address_iter);
+    qd_iterator_free(iter);
+    qd_iterator_free(address_iter);
 
     if(addr)
         return "test_qd_hash_retrieve_prefix_no_match() failed";
@@ -459,8 +530,8 @@ static char 
*test_qd_hash_retrieve_prefix_no_match_separator(void *context)
     qd_hash_t *hash = qd_hash(10, 32, 0);
 
     // No 'y' in policy. There should be no match.
-    qd_field_iterator_t *iter = qd_address_iterator_string("policy.org.apach", 
ITER_VIEW_ADDRESS_HASH);
-    qd_address_iterator_override_prefix(iter, 'C');
+    qd_iterator_t *iter = qd_iterator_string("policy.org.apach", 
ITER_VIEW_ADDRESS_HASH);
+    qd_iterator_annotate_prefix(iter, 'C');
 
     // Insert that hash
     qd_error_t error = qd_hash_insert(hash, iter, "TEST", 0);
@@ -471,15 +542,15 @@ static char 
*test_qd_hash_retrieve_prefix_no_match_separator(void *context)
 
     const char *taddr = "policy.org.apache.dev";
 
-    qd_field_iterator_t *address_iter = qd_address_iterator_string(taddr, 
ITER_VIEW_ADDRESS_HASH);
-    qd_address_iterator_override_prefix(address_iter, 'C');
+    qd_iterator_t *address_iter = qd_iterator_string(taddr, 
ITER_VIEW_ADDRESS_HASH);
+    qd_iterator_annotate_prefix(address_iter, 'C');
 
     qd_address_t *addr;
 
     qd_hash_retrieve_prefix(hash, address_iter, (void*) &addr);
 
-    qd_field_iterator_free(iter);
-    qd_field_iterator_free(address_iter);
+    qd_iterator_free(iter);
+    qd_iterator_free(address_iter);
 
     if(addr)
         return "test_qd_hash_retrieve_prefix_no_match_separator() failed";
@@ -490,8 +561,8 @@ static char 
*test_qd_hash_retrieve_prefix_no_match_separator(void *context)
 static char *test_qd_hash_retrieve_prefix_separator_exact_match(void *context)
 {
     qd_hash_t *hash = qd_hash(10, 32, 0);
-    qd_field_iterator_t *iter = qd_address_iterator_string("policy", 
ITER_VIEW_ADDRESS_HASH);
-    qd_address_iterator_override_prefix(iter, 'C');
+    qd_iterator_t *iter = qd_iterator_string("policy", ITER_VIEW_ADDRESS_HASH);
+    qd_iterator_annotate_prefix(iter, 'C');
 
     // Insert that hash
     qd_error_t error = qd_hash_insert(hash, iter, "TEST", 0);
@@ -502,15 +573,15 @@ static char 
*test_qd_hash_retrieve_prefix_separator_exact_match(void *context)
 
     const char *taddr = "policy";
 
-    qd_field_iterator_t *address_iter = qd_address_iterator_string(taddr, 
ITER_VIEW_ADDRESS_HASH);
-    qd_address_iterator_override_prefix(address_iter, 'C');
+    qd_iterator_t *address_iter = qd_iterator_string(taddr, 
ITER_VIEW_ADDRESS_HASH);
+    qd_iterator_annotate_prefix(address_iter, 'C');
 
     qd_address_t *addr;
 
     qd_hash_retrieve_prefix(hash, address_iter, (void*) &addr);
 
-    qd_field_iterator_free(iter);
-    qd_field_iterator_free(address_iter);
+    qd_iterator_free(iter);
+    qd_iterator_free(address_iter);
 
     if(addr)
         return 0;
@@ -521,8 +592,8 @@ static char 
*test_qd_hash_retrieve_prefix_separator_exact_match(void *context)
 static char *test_qd_hash_retrieve_prefix_separator_exact_match_1(void 
*context)
 {
     qd_hash_t *hash = qd_hash(10, 32, 0);
-    qd_field_iterator_t *iter = 
qd_address_iterator_string("policy.apache.org", ITER_VIEW_ADDRESS_HASH);
-    qd_address_iterator_override_prefix(iter, 'C');
+    qd_iterator_t *iter = qd_iterator_string("policy.apache.org", 
ITER_VIEW_ADDRESS_HASH);
+    qd_iterator_annotate_prefix(iter, 'C');
 
     // Insert that hash
     qd_error_t error = qd_hash_insert(hash, iter, "TEST", 0);
@@ -533,15 +604,15 @@ static char 
*test_qd_hash_retrieve_prefix_separator_exact_match_1(void *context)
 
     const char *taddr = "policy.apache.org";
 
-    qd_field_iterator_t *address_iter = qd_address_iterator_string(taddr, 
ITER_VIEW_ADDRESS_HASH);
-    qd_address_iterator_override_prefix(address_iter, 'C');
+    qd_iterator_t *address_iter = qd_iterator_string(taddr, 
ITER_VIEW_ADDRESS_HASH);
+    qd_iterator_annotate_prefix(address_iter, 'C');
 
     qd_address_t *addr;
 
     qd_hash_retrieve_prefix(hash, address_iter, (void*) &addr);
 
-    qd_field_iterator_free(iter);
-    qd_field_iterator_free(address_iter);
+    qd_iterator_free(iter);
+    qd_iterator_free(address_iter);
 
     if(addr)
         return 0;
@@ -555,8 +626,8 @@ static char 
*test_qd_hash_retrieve_prefix_separator_exact_match_slashes(void *co
     qd_hash_t *hash = qd_hash(10, 32, 0);
 
     // Use slashes. slashes are not treated as separators, they are just part 
of the literal string.
-    qd_field_iterator_t *iter = 
qd_address_iterator_string("policy/apache/org", ITER_VIEW_ADDRESS_HASH);
-    qd_address_iterator_override_prefix(iter, 'C');
+    qd_iterator_t *iter = qd_iterator_string("policy/apache/org", 
ITER_VIEW_ADDRESS_HASH);
+    qd_iterator_annotate_prefix(iter, 'C');
 
     // Insert that hash
     qd_error_t error = qd_hash_insert(hash, iter, "TEST", 0);
@@ -567,15 +638,15 @@ static char 
*test_qd_hash_retrieve_prefix_separator_exact_match_slashes(void *co
 
     const char *taddr = "policy/apache/org";
 
-    qd_field_iterator_t *address_iter = qd_address_iterator_string(taddr, 
ITER_VIEW_ADDRESS_HASH);
-    qd_address_iterator_override_prefix(address_iter, 'C');
+    qd_iterator_t *address_iter = qd_iterator_string(taddr, 
ITER_VIEW_ADDRESS_HASH);
+    qd_iterator_annotate_prefix(address_iter, 'C');
 
     qd_address_t *addr;
 
     qd_hash_retrieve_prefix(hash, address_iter, (void*) &addr);
 
-    qd_field_iterator_free(iter);
-    qd_field_iterator_free(address_iter);
+    qd_iterator_free(iter);
+    qd_iterator_free(address_iter);
 
     if(addr)
         return 0;
@@ -587,8 +658,8 @@ static char 
*test_qd_hash_retrieve_prefix_separator_exact_match_slashes(void *co
 static char 
*test_qd_hash_retrieve_prefix_separator_exact_match_dot_at_end(void *context)
 {
     qd_hash_t *hash = qd_hash(10, 32, 0);
-    qd_field_iterator_t *iter = qd_address_iterator_string("policy", 
ITER_VIEW_ADDRESS_HASH);
-    qd_address_iterator_override_prefix(iter, 'C');
+    qd_iterator_t *iter = qd_iterator_string("policy", ITER_VIEW_ADDRESS_HASH);
+    qd_iterator_annotate_prefix(iter, 'C');
 
     // Insert that hash
     qd_error_t error = qd_hash_insert(hash, iter, "TEST", 0);
@@ -599,15 +670,15 @@ static char 
*test_qd_hash_retrieve_prefix_separator_exact_match_dot_at_end(void
 
     const char *taddr = "policy.";
 
-    qd_field_iterator_t *address_iter = qd_address_iterator_string(taddr, 
ITER_VIEW_ADDRESS_HASH);
-    qd_address_iterator_override_prefix(address_iter, 'C');
+    qd_iterator_t *address_iter = qd_iterator_string(taddr, 
ITER_VIEW_ADDRESS_HASH);
+    qd_iterator_annotate_prefix(address_iter, 'C');
 
     qd_address_t *addr;
 
     qd_hash_retrieve_prefix(hash, address_iter, (void*) &addr);
 
-    qd_field_iterator_free(iter);
-    qd_field_iterator_free(address_iter);
+    qd_iterator_free(iter);
+    qd_iterator_free(address_iter);
 
     if(addr)
         return 0;
@@ -619,8 +690,8 @@ static char 
*test_qd_hash_retrieve_prefix_separator_exact_match_dot_at_end(void
 static char 
*test_qd_hash_retrieve_prefix_separator_exact_match_dot_at_end_1(void *context)
 {
     qd_hash_t *hash = qd_hash(10, 32, 0);
-    qd_field_iterator_t *iter = qd_address_iterator_string("policy.apache", 
ITER_VIEW_ADDRESS_HASH);
-    qd_address_iterator_override_prefix(iter, 'C');
+    qd_iterator_t *iter = qd_iterator_string("policy.apache", 
ITER_VIEW_ADDRESS_HASH);
+    qd_iterator_annotate_prefix(iter, 'C');
 
     // Insert that hash
     qd_error_t error = qd_hash_insert(hash, iter, "TEST", 0);
@@ -631,15 +702,15 @@ static char 
*test_qd_hash_retrieve_prefix_separator_exact_match_dot_at_end_1(voi
 
     const char *taddr = "policy.apache.";
 
-    qd_field_iterator_t *address_iter = qd_address_iterator_string(taddr, 
ITER_VIEW_ADDRESS_HASH);
-    qd_address_iterator_override_prefix(address_iter, 'C');
+    qd_iterator_t *address_iter = qd_iterator_string(taddr, 
ITER_VIEW_ADDRESS_HASH);
+    qd_iterator_annotate_prefix(address_iter, 'C');
 
     qd_address_t *addr;
 
     qd_hash_retrieve_prefix(hash, address_iter, (void*) &addr);
 
-    qd_field_iterator_free(iter);
-    qd_field_iterator_free(address_iter);
+    qd_iterator_free(iter);
+    qd_iterator_free(address_iter);
 
     if(addr)
         return 0;
@@ -690,9 +761,79 @@ static char *test_prefix_hash(void *context)
     // Insert the entries into the hash table
     //
     while (entries[idx]) {
-        qd_field_iterator_t *iter = qd_address_iterator_string(entries[idx], 
ITER_VIEW_ADDRESS_HASH);
+        qd_iterator_t *iter = qd_iterator_string(entries[idx], 
ITER_VIEW_ADDRESS_HASH);
+        qd_hash_insert(hash, iter, (void*) (idx + 1), 0);
+        qd_iterator_free(iter);
+        idx++;
+    }
+
+    //
+    // Test the patterns
+    //
+    idx = 0;
+    while (patterns[idx].pattern) {
+        qd_iterator_t *iter = qd_iterator_string(patterns[idx].pattern, 
ITER_VIEW_ADDRESS_HASH);
+        void *ptr;
+        qd_hash_retrieve_prefix(hash, iter, &ptr);
+        int position = (int) ((long) ptr);
+        position--;
+        if (position != patterns[idx].entry) {
+            snprintf(error, 200, "Pattern: '%s', expected %d, got %d",
+                     patterns[idx].pattern, patterns[idx].entry, position);
+            return error;
+        }
+        idx++;
+    }
+
+    return 0;
+}
+
+
+static char *test_prefix_hash_with_space(void *context)
+{
+    static char error[200];
+    char *entries[] = {"space.an_entry_with_no_separators",   //  0
+                       "space.dot.separated.pattern.one",     //  1
+                       "space.dot.separated.pattern.two",     //  2
+                       "space.dot.separated.",                //  3
+                       "space.dot",                           //  4
+                       "space.slash",                         //  5
+                       "space.slash/delimited",               //  6
+                       "space.slash/delimited/first",         //  7
+                       "space.slash/delimited/second",        //  8
+                       "space.mixed.set/of/delimiters.one",   //  9
+                       "space.mixed.set/of/delimiters.two",   // 10
+                       "space.mixed.set/of/delimiters/three", // 11
+                       "space.mixed.set",                     // 12
+                       0};
+    struct { char* pattern; int entry; } patterns[] = 
{{"an_entry_with_no_separators", 0},
+                                                       
{"dot.separated.pattern.one", 1},
+                                                       
{"dot.separated.pattern.two", 2},
+                                                       
{"dot.separated.pattern.three", 3},
+                                                       
{"dot.separated.other.pattern", 3},
+                                                       
{"dot.differentiated/other", 4},
+                                                       {"slash/other", 5},
+                                                       
{"slash/delimited/first", 7},
+                                                       
{"slash/delimited/second", 8},
+                                                       
{"slash/delimited/third", 6},
+                                                       {"mixed.other", -1},
+                                                       {"mixed.set/other", 12},
+                                                       
{"mixed.set/of/delimiters.one/queue", 9},
+                                                       
{"mixed.set/of/delimiters.one.queue", 9},
+                                                       
{"mixed.set.of/delimiters.one.queue", 12},
+                                                       
{"other.thing.entirely", -1},
+                                                       {0, 0}};
+
+    qd_hash_t *hash = qd_hash(10, 32, 0);
+    long idx = 0;
+
+    //
+    // Insert the entries into the hash table
+    //
+    while (entries[idx]) {
+        qd_iterator_t *iter = qd_iterator_string(entries[idx], 
ITER_VIEW_ADDRESS_HASH);
         qd_hash_insert(hash, iter, (void*) (idx + 1), 0);
-        qd_field_iterator_free(iter);
+        qd_iterator_free(iter);
         idx++;
     }
 
@@ -701,7 +842,8 @@ static char *test_prefix_hash(void *context)
     //
     idx = 0;
     while (patterns[idx].pattern) {
-        qd_field_iterator_t *iter = 
qd_address_iterator_string(patterns[idx].pattern, ITER_VIEW_ADDRESS_HASH);
+        qd_iterator_t *iter = qd_iterator_string(patterns[idx].pattern, 
ITER_VIEW_ADDRESS_HASH);
+        qd_iterator_annotate_space(iter, "space.", 6);
         void *ptr;
         qd_hash_retrieve_prefix(hash, iter, &ptr);
         int position = (int) ((long) ptr);
@@ -722,14 +864,17 @@ int field_tests(void)
 {
     int result = 0;
 
-    qd_field_iterator_set_address("my-area", "my-router");
+    qd_iterator_set_address("my-area", "my-router");
 
     TEST_CASE(test_view_global_dns, 0);
     TEST_CASE(test_view_global_non_dns, 0);
     TEST_CASE(test_view_global_no_host, 0);
     TEST_CASE(test_view_global_no_host_slash, 0);
+    TEST_CASE(test_trim, 0);
+    TEST_CASE(test_sub_iterator, 0);
     TEST_CASE(test_view_address_hash, 0);
     TEST_CASE(test_view_address_hash_override, 0);
+    TEST_CASE(test_view_address_with_space, 0);
     TEST_CASE(test_view_node_hash, 0);
     TEST_CASE(test_field_advance_string, 0);
     TEST_CASE(test_field_advance_buffer, 0);
@@ -743,6 +888,7 @@ int field_tests(void)
     TEST_CASE(test_qd_hash_retrieve_prefix_separator_exact_match_dot_at_end, 
0);
     TEST_CASE(test_qd_hash_retrieve_prefix_separator_exact_match_dot_at_end_1, 
0);
     TEST_CASE(test_prefix_hash, 0);
+    TEST_CASE(test_prefix_hash_with_space, 0);
 
     return result;
 }

http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/6a783b07/tests/message_test.c
----------------------------------------------------------------------
diff --git a/tests/message_test.c b/tests/message_test.c
index 7984d87..8d2d3be 100644
--- a/tests/message_test.c
+++ b/tests/message_test.c
@@ -101,12 +101,12 @@ static char* test_receive_from_messenger(void *context)
     int valid = qd_message_check(msg, QD_DEPTH_ALL);
     if (!valid) return "qd_message_check returns 'invalid'";
 
-    qd_field_iterator_t *iter = qd_message_field_iterator(msg, QD_FIELD_TO);
+    qd_iterator_t *iter = qd_message_field_iterator(msg, QD_FIELD_TO);
     if (iter == 0) return "Expected an iterator for the 'to' field";
 
-    if (!qd_field_iterator_equal(iter, (unsigned char*) "test_addr_1"))
+    if (!qd_iterator_equal(iter, (unsigned char*) "test_addr_1"))
         return "Mismatched 'to' field contents";
-    qd_field_iterator_free(iter);
+    qd_iterator_free(iter);
 
     ssize_t test_len = qd_message_field_length(msg, QD_FIELD_TO);
     if (test_len != 11) return "Incorrect field length";
@@ -152,29 +152,29 @@ static char* test_message_properties(void *context)
 
     set_content(content, size);
 
-    qd_field_iterator_t *iter = qd_message_field_iterator(msg, 
QD_FIELD_CORRELATION_ID);
+    qd_iterator_t *iter = qd_message_field_iterator(msg, 
QD_FIELD_CORRELATION_ID);
     if (!iter) return "Expected iterator for the 'correlation-id' field";
-    if (qd_field_iterator_length(iter) != 13) return "Bad length for 
correlation-id";
-    if (!qd_field_iterator_equal(iter, (const unsigned char *)"correlationId"))
+    if (qd_iterator_length(iter) != 13) return "Bad length for correlation-id";
+    if (!qd_iterator_equal(iter, (const unsigned char *)"correlationId"))
         return "Invalid correlation-id";
-    qd_field_iterator_free(iter);
+    qd_iterator_free(iter);
 
     iter = qd_message_field_iterator(msg, QD_FIELD_SUBJECT);
     if (!iter) return "Expected iterator for the 'subject' field";
-    if (!qd_field_iterator_equal(iter, (const unsigned char *)subject))
+    if (!qd_iterator_equal(iter, (const unsigned char *)subject))
         return "Bad value for subject";
-    qd_field_iterator_free(iter);
+    qd_iterator_free(iter);
 
     iter = qd_message_field_iterator(msg, QD_FIELD_MESSAGE_ID);
     if (!iter) return "Expected iterator for the 'message-id' field";
-    if (qd_field_iterator_length(iter) != 9) return "Bad length for 
message-id";
-    if (!qd_field_iterator_equal(iter, (const unsigned char *)"messageId"))
+    if (qd_iterator_length(iter) != 9) return "Bad length for message-id";
+    if (!qd_iterator_equal(iter, (const unsigned char *)"messageId"))
         return "Invalid message-id";
-    qd_field_iterator_free(iter);
+    qd_iterator_free(iter);
 
     iter = qd_message_field_iterator(msg, QD_FIELD_TO);
     if (iter) return "Expected no iterator for the 'to' field";
-    qd_field_iterator_free(iter);
+    qd_iterator_free(iter);
 
     qd_message_free(msg);
 

http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/6a783b07/tests/parse_test.c
----------------------------------------------------------------------
diff --git a/tests/parse_test.c b/tests/parse_test.c
index ec7d74a..6cde698 100644
--- a/tests/parse_test.c
+++ b/tests/parse_test.c
@@ -67,13 +67,13 @@ static char *test_parser_fixed_scalars(void *context)
     static char error[1024];
 
     while (fs_vectors[idx].data) {
-        qd_field_iterator_t *field  = 
qd_field_iterator_binary(fs_vectors[idx].data,
-                                                               
fs_vectors[idx].length);
+        qd_iterator_t *field  = qd_iterator_binary(fs_vectors[idx].data,
+                                                   fs_vectors[idx].length, 
ITER_VIEW_ALL);
         qd_parsed_field_t *parsed = qd_parse(field);
 
-        qd_field_iterator_t *typed_iter = qd_parse_typed(parsed);
+        qd_iterator_t *typed_iter = qd_parse_typed(parsed);
 
-        int length = qd_field_iterator_length(typed_iter);
+        int length = qd_iterator_length(typed_iter);
 
         if (length != fs_vectors[idx].length)
             return "Length of typed iterator does not match actual length";
@@ -110,7 +110,7 @@ static char *test_parser_fixed_scalars(void *context)
         }
         idx++;
 
-        qd_field_iterator_free(field);
+        qd_iterator_free(field);
         qd_parse_free(parsed);
     }
 
@@ -118,6 +118,82 @@ static char *test_parser_fixed_scalars(void *context)
 }
 
 
+static char *test_map(void *context)
+{
+    static char error[1000];
+    const char *data =
+        "\xd1\x00\x00\x00\x2d\x00\x00\x00\x06"    // map32, 6 items
+        "\xa3\x05\x66irst\xa1\x0evalue_of_first"  // (23) 
"first":"value_of_first"
+        "\xa3\x06second\x52\x20"                  // (10) "second":32
+        "\xa3\x05third\x41";                      // (8)  "third":true
+    int data_len = 50;
+
+    qd_iterator_t     *data_iter = qd_iterator_binary(data, data_len, 
ITER_VIEW_ALL);
+    qd_parsed_field_t *field     = qd_parse(data_iter);
+    if (!qd_parse_ok(field)) {
+        snprintf(error, 1000, "Parse failed: %s", qd_parse_error(field));
+        return error;
+    }
+
+    if (!qd_parse_is_map(field))
+        return "Expected field to be a map";
+
+    uint32_t count = qd_parse_sub_count(field);
+    if (count != 3) {
+        snprintf(error, 1000, "Expected sub-count==3, got %"PRIu32, count);
+        return error;
+    }
+
+    qd_parsed_field_t *key_field  = qd_parse_sub_key(field, 0);
+    qd_iterator_t     *key_iter   = qd_parse_raw(key_field);
+    qd_iterator_t     *typed_iter = qd_parse_typed(key_field);
+    if (!qd_iterator_equal(key_iter, (unsigned char*) "first")) {
+        snprintf(error, 1000, "First key: expected 'first', got '%s'", 
qd_iterator_copy(key_iter));
+        return error;
+    }
+    if (!qd_iterator_equal(typed_iter, (unsigned char*) "\xa3\x05\x66irst"))
+        return "Incorrect typed iterator on first-key";
+
+    qd_parsed_field_t *val_field = qd_parse_sub_value(field, 0);
+    qd_iterator_t     *val_iter  = qd_parse_raw(val_field);
+    typed_iter = qd_parse_typed(val_field);
+    if (!qd_iterator_equal(val_iter, (unsigned char*) "value_of_first")) {
+        snprintf(error, 1000, "First value: expected 'value_of_first', got 
'%s'", qd_iterator_copy(val_iter));
+        return error;
+    }
+    if (!qd_iterator_equal(typed_iter, (unsigned char*) 
"\xa1\x0evalue_of_first"))
+        return "Incorrect typed iterator on first-key";
+
+    key_field = qd_parse_sub_key(field, 1);
+    key_iter  = qd_parse_raw(key_field);
+    if (!qd_iterator_equal(key_iter, (unsigned char*) "second")) {
+        snprintf(error, 1000, "Second key: expected 'second', got '%s'", 
qd_iterator_copy(key_iter));
+        return error;
+    }
+
+    val_field = qd_parse_sub_value(field, 1);
+    if (qd_parse_as_uint(val_field) != 32) {
+        snprintf(error, 1000, "Second value: expected 32, got %"PRIu32, 
qd_parse_as_uint(val_field));
+        return error;
+    }
+
+    key_field = qd_parse_sub_key(field, 2);
+    key_iter  = qd_parse_raw(key_field);
+    if (!qd_iterator_equal(key_iter, (unsigned char*) "third")) {
+        snprintf(error, 1000, "Third key: expected 'third', got '%s'", 
qd_iterator_copy(key_iter));
+        return error;
+    }
+
+    val_field = qd_parse_sub_value(field, 2);
+    if (!qd_parse_as_bool(val_field)) {
+        snprintf(error, 1000, "Third value: expected true");
+        return error;
+    }
+
+    return 0;
+}
+
+
 struct err_vector_t {
     const char *data;
     int         length;
@@ -142,8 +218,8 @@ static char *test_parser_errors(void *context)
     static char error[1024];
 
     while (err_vectors[idx].data) {
-        qd_field_iterator_t *field  = 
qd_field_iterator_binary(err_vectors[idx].data,
-                                                               
err_vectors[idx].length);
+        qd_iterator_t *field  = qd_iterator_binary(err_vectors[idx].data,
+                                                   err_vectors[idx].length, 
ITER_VIEW_ALL);
         qd_parsed_field_t *parsed = qd_parse(field);
         if (qd_parse_ok(parsed)) {
             sprintf(error, "(%d) Unexpected Parse Success", idx);
@@ -155,7 +231,7 @@ static char *test_parser_errors(void *context)
             return error;
         }
         qd_parse_free(parsed);
-        qd_field_iterator_free(field);
+        qd_iterator_free(field);
         idx++;
     }
 
@@ -170,7 +246,7 @@ static char *test_tracemask(void *context)
     qd_buffer_list_t list;
     static char      error[1024];
 
-    qd_field_iterator_set_address("0", "ROUTER");
+    qd_iterator_set_address("0", "ROUTER");
 
     qd_tracemask_add_router(tm, "amqp:/_topo/0/Router.A", 0);
     qd_tracemask_add_router(tm, "amqp:/_topo/0/Router.B", 1);
@@ -200,8 +276,8 @@ static char *test_tracemask(void *context)
         buf = DEQ_NEXT(buf);
     }
 
-    qd_field_iterator_t *iter = qd_address_iterator_buffer(DEQ_HEAD(list), 0, 
length, ITER_VIEW_ALL);
-    qd_parsed_field_t   *pf   = qd_parse(iter);
+    qd_iterator_t     *iter = qd_iterator_buffer(DEQ_HEAD(list), 0, length, 
ITER_VIEW_ALL);
+    qd_parsed_field_t *pf   = qd_parse(iter);
 
     bm = qd_tracemask_create(tm, pf);
     if (qd_bitmask_cardinality(bm) != 3) {
@@ -247,6 +323,7 @@ int parse_tests()
     int result = 0;
 
     TEST_CASE(test_parser_fixed_scalars, 0);
+    TEST_CASE(test_map, 0);
     TEST_CASE(test_parser_errors, 0);
     TEST_CASE(test_tracemask, 0);
 

http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/6a783b07/tests/run_unit_tests.c
----------------------------------------------------------------------
diff --git a/tests/run_unit_tests.c b/tests/run_unit_tests.c
index 7a8b1d4..173fc38 100644
--- a/tests/run_unit_tests.c
+++ b/tests/run_unit_tests.c
@@ -27,7 +27,6 @@ int tool_tests(void);
 int timer_tests(void);
 int alloc_tests(void);
 int server_tests(qd_dispatch_t *qd);
-int parse_tests(void);
 int compose_tests(void);
 int policy_tests(void);
 
@@ -56,7 +55,6 @@ int main(int argc, char** argv)
     result += timer_tests();
     result += server_tests(qd);
     result += tool_tests();
-    result += parse_tests();
     result += compose_tests();
 #if USE_MEMORY_POOL
     result += alloc_tests();

http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/6a783b07/tests/run_unit_tests_size.c
----------------------------------------------------------------------
diff --git a/tests/run_unit_tests_size.c b/tests/run_unit_tests_size.c
index 67ab404..42fcd23 100644
--- a/tests/run_unit_tests_size.c
+++ b/tests/run_unit_tests_size.c
@@ -22,6 +22,7 @@
 
 int message_tests();
 int field_tests();
+int parse_tests();
 int buffer_tests();
 
 int main(int argc, char** argv)
@@ -40,6 +41,7 @@ int main(int argc, char** argv)
     int result = 0;
     result += message_tests();
     result += field_tests();
+    result += parse_tests();
     result += buffer_tests();
 
     qd_alloc_finalize();


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to