LTKCPP-- LLRP Toolkit C Plus Plus Library
ltkcpp_element.cpp
1 
2 /*
3  *****************************************************************************
4  * *
5  * IMPINJ CONFIDENTIAL AND PROPRIETARY *
6  * *
7  * This source code is the sole property of Impinj, Inc. Reproduction or *
8  * utilization of this source code in whole or in part is forbidden without *
9  * the prior written consent of Impinj, Inc. *
10  * *
11  * (c) Copyright Impinj, Inc. 2007,2008. All rights reserved. *
12  * *
13  *****************************************************************************/
14 
15 
16 #include "ltkcpp_platform.h"
17 #include "ltkcpp_base.h"
18 
19 
20 namespace LLRP
21 {
22 
23 CElement::CElement(void)
24 {
25  m_pType = NULL;
26  m_pParent = NULL;
27 }
28 
29 CElement::~CElement (void)
30 {
31 
32  for (
33  tListOfParameters::iterator elem = m_listAllSubParameters.begin();
34  elem != m_listAllSubParameters.end();
35  elem++)
36  {
37  delete *elem;
38  }
39 }
40 
41 
42 void
44  CParameter * pParameter)
45 {
46  if(NULL != pParameter)
47  {
48  m_listAllSubParameters.push_back(pParameter);
49  }
50 }
51 
52 
53 void
55  CParameter * pParameter)
56 {
57  if(NULL != pParameter)
58  {
59  m_listAllSubParameters.remove(pParameter);
60  }
61 }
62 
63 void
65  tListOfParameters * pParameterList)
66 {
67  for(
68  tListOfParameters::iterator elem = pParameterList->begin();
69  elem != pParameterList->end();
70  elem++)
71  {
73  delete *elem;
74  }
75 
76  pParameterList->clear();
77 }
78 
79 int
81  int (*pFunc)(
82  const CElement * pElement,
83  void * pArg),
84  void * pArg,
85  int iDepth,
86  int nMaxDepth) const
87 {
88  int rc;
89 
90  rc = (*pFunc)(this, pArg);
91  if(0 != rc)
92  {
93  return rc;
94  }
95 
96  if(iDepth >= nMaxDepth)
97  {
98  return 0;
99  }
100 
101  for (
102  tListOfParameters::const_iterator elem =
103  m_listAllSubParameters.begin();
104  elem != m_listAllSubParameters.end();
105  elem++)
106  {
107  (*elem)->walk(pFunc, pArg, iDepth+1, nMaxDepth);
108  }
109 
110  return 0;
111 }
112 
113 CMessage::CMessage(void)
114 {
115  m_MessageID = 0;
116 }
117 
118 
119 llrp_bool_t
121  const CTypeDescriptor * pEnclosingTypeDescriptor) const
122 {
123  return FALSE;
124 }
125 
126 llrp_bool_t
128  const CTypeDescriptor * pEnclosingTypeDescriptor)
129 {
130  /*
131  * If it is a generic Custom parameter allow it.
132  */
133  if(!m_pType->m_bIsMessage && NULL == m_pType->m_pVendorDescriptor &&
134  1023u == m_pType->m_TypeNum)
135  {
136  return TRUE;
137  }
138 
139  /*
140  * At this point checking specifically if it is allowed
141  * is perfunctory.
142  */
143  return isAllowedIn(pEnclosingTypeDescriptor);
144 }
145 
146 
147 }; /* namespace LLRP */
This is the base class for all parameter and message types.
Definition: ltkcpp_base.h:968
const CTypeDescriptor * m_pType
The type descriptor desribing this element.
Definition: ltkcpp_base.h:972
void clearSubParameterList(tListOfParameters *pParameterList)
Clear a list of subparameters. For each entry apply removeSubParameter().
Based type descriptions for the LTKCPP library.
llrp_u32_t m_TypeNum
Type number or, for custom, subtype number.
Definition: ltkcpp_base.h:772
int walk(int(*pFunc)(const CElement *pElement, void *pArg), void *pArg, int iDepth, int nMaxDepth) const
Recursive tree walk. The callback is invoked for each element.
Based types for the LKTCPP library.
void removeSubParameterFromAllList(CParameter *pParameter)
Delete a subparameter from m_listAllSubParameters. Called by the accessor functions setXXX (to remove...
CElement * m_pParent
Element that encloses this one, NULL if this is top-level element.
Definition: ltkcpp_base.h:975
virtual llrp_bool_t isAllowedIn(const CTypeDescriptor *pEnclosingTypeDescriptor) const
Validate whether the element is allowed as a base type in the enclosing element.
const CVendorDescriptor * m_pVendorDescriptor
NULL=>standard LLRP, !NULL=>Vendor (PEN) of custom message or parameter.
Definition: ltkcpp_base.h:766
void addSubParameterToAllList(CParameter *pParameter)
Add a subparameter to m_listAllSubParameters. Called by the accessor functions setXXX and addXXX...
Base Class for All LLRP LTK Parameters.
Definition: ltkcpp_base.h:1125
tListOfParameters m_listAllSubParameters
List of all sub elements.
Definition: ltkcpp_base.h:978
llrp_bool_t isAllowedExtension(const CTypeDescriptor *pEnclosingTypeDescriptor)
Validate whether the element is allowed as an extension in the enclosing element. ...
llrp_bool_t m_bIsMessage
TRUE for a message type, FALSE for a parameter type.
Definition: ltkcpp_base.h:759
Describes a message or parameter type.
Definition: ltkcpp_base.h:755