|
|
| 120 |
os << "]"; |
120 |
os << "]"; |
| 121 |
return os; |
121 |
return os; |
| 122 |
} |
122 |
} |
|
|
123 |
|
| 124 |
std::string::size_type |
| 125 |
findNextAtt (std::string &str, size_t pos) |
| 126 |
{ |
| 127 |
int level = 0; |
| 128 |
for (std::string::size_type i = pos; i < str.size (); i++) |
| 129 |
{ |
| 130 |
if (level == 0 && str[i] == '|') |
| 131 |
{ |
| 132 |
return i; |
| 133 |
} |
| 134 |
if (str[i] == '[') |
| 135 |
{ |
| 136 |
level++; |
| 137 |
} |
| 138 |
else if (str[i] == ']') |
| 139 |
{ |
| 140 |
level--; |
| 141 |
} |
| 142 |
} |
| 143 |
return std::string::npos; |
| 144 |
} |
| 145 |
|
| 123 |
std::istream & operator >> (std::istream &is, ObjectFactory &factory) |
146 |
std::istream & operator >> (std::istream &is, ObjectFactory &factory) |
| 124 |
{ |
147 |
{ |
| 125 |
std::string v; |
148 |
std::string v; |
| 126 |
is >> v; |
149 |
is >> v; |
| 127 |
std::string::size_type lbracket, rbracket; |
150 |
std::string::size_type lbracket, rbracket; |
| 128 |
lbracket = v.find ("["); |
151 |
lbracket = v.find ("["); |
| 129 |
rbracket = v.find ("]"); |
152 |
rbracket = v.rfind ("]"); |
| 130 |
if (lbracket == std::string::npos && rbracket == std::string::npos) |
153 |
if (lbracket == std::string::npos && rbracket == std::string::npos) |
| 131 |
{ |
154 |
{ |
| 132 |
factory.SetTypeId (v); |
155 |
factory.SetTypeId (v); |
|
|
| 162 |
} |
185 |
} |
| 163 |
else |
186 |
else |
| 164 |
{ |
187 |
{ |
| 165 |
std::string::size_type next = parameters.find ("|", cur); |
188 |
std::string::size_type next = findNextAtt (parameters, cur); |
| 166 |
std::string value; |
189 |
std::string value; |
| 167 |
if (next == std::string::npos) |
190 |
if (next == std::string::npos) |
| 168 |
{ |
191 |
{ |