LTKCPP-- LLRP Toolkit C Plus Plus Library
ltkcpp_element.cpp
00001 
00002 /*
00003  *****************************************************************************
00004  *                                                                           *
00005  *                 IMPINJ CONFIDENTIAL AND PROPRIETARY                       *
00006  *                                                                           *
00007  * This source code is the sole property of Impinj, Inc.  Reproduction or    *
00008  * utilization of this source code in whole or in part is forbidden without  *
00009  * the prior written consent of Impinj, Inc.                                 *
00010  *                                                                           *
00011  * (c) Copyright Impinj, Inc. 2007,2008. All rights reserved.                *
00012  *                                                                           *
00013  *****************************************************************************/
00014 
00015 
00016 #include "ltkcpp_platform.h"
00017 #include "ltkcpp_base.h"
00018 
00019 
00020 namespace LLRP
00021 {
00022 
00023 CElement::CElement(void)
00024 {
00025     m_pType = NULL;
00026     m_pParent = NULL;
00027 }
00028 
00029 CElement::~CElement (void)
00030 {
00031 
00032     for (
00033         tListOfParameters::iterator elem = m_listAllSubParameters.begin();
00034         elem != m_listAllSubParameters.end();
00035         elem++)
00036     {
00037         delete *elem;
00038     }
00039 }
00040 
00041 
00042 void
00043 CElement::addSubParameterToAllList (
00044   CParameter *                  pParameter)
00045 {
00046     if(NULL != pParameter)
00047     {
00048         m_listAllSubParameters.push_back(pParameter);
00049     }
00050 }
00051 
00052 
00053 void
00054 CElement::removeSubParameterFromAllList (
00055   CParameter *                  pParameter)
00056 {
00057     if(NULL != pParameter)
00058     {
00059         m_listAllSubParameters.remove(pParameter);
00060     }
00061 }
00062 
00063 void
00064 CElement::clearSubParameterList (
00065   tListOfParameters *           pParameterList)
00066 {
00067     for(
00068         tListOfParameters::iterator elem = pParameterList->begin();
00069         elem != pParameterList->end();
00070         elem++)
00071     {
00072         removeSubParameterFromAllList(*elem);
00073         delete *elem;
00074     }
00075 
00076     pParameterList->clear();
00077 }
00078 
00079 int
00080 CElement::walk (
00081   int                           (*pFunc)(
00082                                   const CElement *  pElement,
00083                                   void *            pArg),
00084   void *                        pArg,
00085   int                           iDepth,
00086   int                           nMaxDepth) const
00087 {
00088     int                         rc;
00089 
00090     rc = (*pFunc)(this, pArg);
00091     if(0 != rc)
00092     {
00093         return rc;
00094     }
00095 
00096     if(iDepth >= nMaxDepth)
00097     {
00098         return 0;
00099     }
00100 
00101     for (
00102         tListOfParameters::const_iterator elem =
00103                                     m_listAllSubParameters.begin();
00104         elem != m_listAllSubParameters.end();
00105         elem++)
00106     {
00107         (*elem)->walk(pFunc, pArg, iDepth+1, nMaxDepth);
00108     }
00109 
00110     return 0;
00111 }
00112 
00113 CMessage::CMessage(void)
00114 {
00115     m_MessageID = 0;
00116 }
00117 
00118 
00119 llrp_bool_t
00120 CParameter::isAllowedIn (
00121   const CTypeDescriptor *       pEnclosingTypeDescriptor) const
00122 {
00123     return FALSE;
00124 }
00125 
00126 llrp_bool_t
00127 CParameter::isAllowedExtension (
00128   const CTypeDescriptor *       pEnclosingTypeDescriptor)
00129 {
00130     /*
00131      * If it is a generic Custom parameter allow it.
00132      */
00133     if(!m_pType->m_bIsMessage && NULL == m_pType->m_pVendorDescriptor &&
00134        1023u == m_pType->m_TypeNum)
00135     {
00136         return TRUE;
00137     }
00138 
00139     /*
00140      * At this point checking specifically if it is allowed
00141      * is perfunctory.
00142      */
00143     return isAllowedIn(pEnclosingTypeDescriptor);
00144 }
00145 
00146 
00147 }; /* namespace LLRP */