-
Notifications
You must be signed in to change notification settings - Fork 1
/
EnumOperationParameter.cpp
121 lines (97 loc) · 3.4 KB
/
EnumOperationParameter.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
//===========================================================================//
// FILE: EnumOperationParameter.cpp //
//------------------------------------------------------------------------ //
// PURPOSE: //
// 枚举型的参数。 //
// //
//------------------------------------------------------------------------ //
// AUTHOR: datangmobile LMT-B pengqiang //
// pengqiang@datangmobile.cn TEL: +86 10 58833109. //
// Copyright: //
// Copyright (c) 2005-2015, DatangMobile Corporation. All rights reserved. //
// --------------------------------------------------------------------- //
// Note: //
// //
// //
//----------------------------------------------------------------------- //
// HISTORY: //
// 2013-06-05 - create by pengqiang //
//==========================================================================//
#include "StdAfx.h"
#include <boost/tokenizer.hpp>
#include <boost/foreach.hpp>
#include <string>
#include "EnumOperationParameter.h"
using std::string;
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
EnumOperationParameter::EnumOperationParameter()
: OperationParameter()
{
}
EnumOperationParameter::EnumOperationParameter(IMibNode* mibNode, const CString& parameterValue)
: OperationParameter(mibNode, parameterValue)
{
}
EnumOperationParameter::~EnumOperationParameter(void)
{
}
void EnumOperationParameter::Initialize(IMibNode* mibNode, const CString& value)
{
OperationParameter::Initialize(mibNode, value);
ParseValueRange();
}
void EnumOperationParameter::ParseValueRange()
{
string valueRange = GetValueRange();
//对形如:"1:创建/2:删除...."的文本进行拆分成取值段
typedef boost::tokenizer<boost::char_separator<char> > tokenizer;
boost::char_separator<char> sectionSeparator("/");
tokenizer valueSection(valueRange, sectionSeparator);
for (tokenizer::iterator sectionIterator = valueSection.begin(); sectionIterator != valueSection.end(); ++sectionIterator)
{
boost::char_separator<char> valueSeparator(":");
tokenizer valueAndDescription(*sectionIterator, valueSeparator);
tokenizer::iterator valueIterator = valueAndDescription.begin();
if(valueAndDescription.end() == valueIterator)
continue;
string curValue = *valueIterator;
++valueIterator;
if(valueAndDescription.end() == valueIterator)
continue;
string curDescription = *valueIterator;
AddValueSection(curValue.c_str(), curDescription.c_str());
}
}
void EnumOperationParameter::AddValueSection(const CString& value, const CString& description)
{
ValuePair addValue;
addValue.value = value;
addValue.description = description;
valueSections.push_back(addValue);
}
BOOL EnumOperationParameter::GetValueSections(vector<boost::any>& valueSectionCopy)
{
BOOST_FOREACH(ValuePair valueSegment, valueSections)
{
valueSectionCopy.push_back(valueSegment);
}
return TRUE;
}
CString EnumOperationParameter::GetDisplayValue()
{
return GetValueDescription(GetValue());
}
CString EnumOperationParameter::GetValueDescription(const CString& value)
{
BOOST_FOREACH(ValuePair valueSegment, valueSections)
{
if( 0 != valueSegment.value.CompareNoCase(value))
continue;
return valueSegment.description;
}
return "null";
}