Source

z3 / src / util / ref_util.h

/*++
Copyright (c) 2011 Microsoft Corporation

Module Name:

    ref_util.h

Abstract:

    Some goodies for managing reference counters.

Author:

    Leonardo (leonardo) 2011-06-07

Notes:

--*/
#ifndef _REF_UTIL_H_
#define _REF_UTIL_H_

/**
   \brief Decrement the reference counter of the keys and values stored in the map,
   then reset the map.
*/
template<typename Mng1, typename Mng2, typename Map>
void dec_ref_map_key_values(Mng1 & m1, Mng2 & m2, Map & map) {
    typename Map::iterator it  = map.begin();
    typename Map::iterator end = map.end();
    for (; it != end; ++it) {
        m1.dec_ref(it->m_key);
        m2.dec_ref(it->m_value);
    }
    map.reset();
}

/**
   \brief Decrement the reference counter of the keys and values stored in the map,
   then reset the map.
*/
template<typename Mng, typename Map>
void dec_ref_map_key_values(Mng & m, Map & map) {
    dec_ref_map_key_values(m, m, map);
}

/**
   \brief Decrement the reference counter of the keys stored in the map,
   then reset the map.
*/
template<typename Mng, typename Map>
void dec_ref_map_keys(Mng & m, Map & map) {
    typename Map::iterator it  = map.begin();
    typename Map::iterator end = map.end();
    for (; it != end; ++it) {
        m.dec_ref(it->m_key);
    }
    map.reset();
}


/**
   \brief Decrement the reference counter of the values stored in the map,
   then reset the map.
*/
template<typename Mng, typename Map>
void dec_ref_map_values(Mng & m, Map & map) {
    typename Map::iterator it  = map.begin();
    typename Map::iterator end = map.end();
    for (; it != end; ++it) {
        m.dec_ref(it->m_value);
    }
    map.reset();
}


/**
   \brief Decrement the reference counter of the values stored in the map,
   then reset the map.
*/
template<typename Mng, typename C>
void dec_ref_collection_values(Mng & m, C & c) {
    typename C::iterator it  = c.begin();
    typename C::iterator end = c.end();
    for (; it != end; ++it) {
        m.dec_ref(*it);
    }
    c.reset();
}


#endif
Tip: Filter by directory path e.g. /media app.js to search for public/media/app.js.
Tip: Use camelCasing e.g. ProjME to search for ProjectModifiedEvent.java.
Tip: Filter by extension type e.g. /repo .js to search for all .js files in the /repo directory.
Tip: Separate your search with spaces e.g. /ssh pom.xml to search for src/ssh/pom.xml.
Tip: Use ↑ and ↓ arrow keys to navigate and return to view the file.
Tip: You can also navigate files with Ctrl+j (next) and Ctrl+k (previous) and view the file with Ctrl+o.
Tip: You can also navigate files with Alt+j (next) and Alt+k (previous) and view the file with Alt+o.