meta/SaiObjectCollection.cpp (98 lines of code) (raw):

#include "SaiObjectCollection.h" #include "sai_serialize.h" using namespace saimeta; void SaiObjectCollection::clear() { SWSS_LOG_ENTER(); m_objects.clear(); } bool SaiObjectCollection::objectExists( _In_ const sai_object_meta_key_t& metaKey) const { SWSS_LOG_ENTER(); bool exists = m_objects.find(metaKey) != m_objects.end(); return exists; } void SaiObjectCollection::createObject( _In_ const sai_object_meta_key_t& metaKey) { SWSS_LOG_ENTER(); auto obj = std::make_shared<SaiObject>(metaKey); if (objectExists(metaKey)) { SWSS_LOG_THROW("FATAL: object %s already exists", sai_serialize_object_meta_key(metaKey).c_str()); } m_objects[metaKey] = obj; } void SaiObjectCollection::removeObject( _In_ const sai_object_meta_key_t& metaKey) { SWSS_LOG_ENTER(); if (!objectExists(metaKey)) { SWSS_LOG_THROW("FATAL: object %s doesn't exist", sai_serialize_object_meta_key(metaKey).c_str()); } m_objects.erase(metaKey); } void SaiObjectCollection::setObjectAttr( _In_ const sai_object_meta_key_t& metaKey, _In_ const sai_attr_metadata_t& md, _In_ const sai_attribute_t *attr) { SWSS_LOG_ENTER(); if (!objectExists(metaKey)) { SWSS_LOG_THROW("FATAL: object %s doesn't exist", sai_serialize_object_meta_key(metaKey).c_str()); } m_objects[metaKey]->setAttr(&md, attr); } std::shared_ptr<SaiAttrWrapper> SaiObjectCollection::getObjectAttr( _In_ const sai_object_meta_key_t& metaKey, _In_ sai_attr_id_t id) { SWSS_LOG_ENTER(); /* * We can't throw if object don't exists, since we can call this function * on create API, and then previous object will not exists, of course we * should make exists check before. */ auto it = m_objects.find(metaKey); if (it == m_objects.end()) { SWSS_LOG_ERROR("object key %s not found", sai_serialize_object_meta_key(metaKey).c_str()); return nullptr; } return it->second->getAttr(id); } std::vector<std::shared_ptr<SaiObject>> SaiObjectCollection::getObjectsByObjectType( _In_ sai_object_type_t objectType) { SWSS_LOG_ENTER(); std::vector<std::shared_ptr<SaiObject>> vec; for (auto& kvp: m_objects) { if (kvp.second->getObjectType() == objectType) vec.push_back(kvp.second); } return vec; } std::shared_ptr<SaiObject> SaiObjectCollection::getObject( _In_ const sai_object_meta_key_t& metaKey) const { SWSS_LOG_ENTER(); if (!objectExists(metaKey)) { SWSS_LOG_THROW("FATAL: object %s doesn't exist", sai_serialize_object_meta_key(metaKey).c_str()); } return m_objects.at(metaKey); } std::vector<sai_object_meta_key_t> SaiObjectCollection::getAllKeys() const { SWSS_LOG_ENTER(); std::vector<sai_object_meta_key_t> vec; for (auto& it: m_objects) { vec.push_back(it.first); } return vec; }