/ Make the top tree from the object path. */ /
| 1174 | /* Make the top tree from the object path. */ |
| 1175 | /***********************************************************************/ |
| 1176 | bool TDBJSN::MakeTopTree(PGLOBAL g, PJSON jsp) |
| 1177 | { |
| 1178 | if (Objname) { |
| 1179 | if (!Val) { |
| 1180 | // Parse and allocate Objname item(s) |
| 1181 | char *p, *objpath = PlugDup(g, Objname); |
| 1182 | char *sep = (char*)(Sep == ':' ? ":[" : ".["); |
| 1183 | int i; |
| 1184 | bool bp = false, b = false; |
| 1185 | PJOB objp; |
| 1186 | PJAR arp; |
| 1187 | PJVAL val = NULL; |
| 1188 | |
| 1189 | Top = NULL; |
| 1190 | |
| 1191 | for (; objpath; objpath = p, bp = b) { |
| 1192 | if ((p = strpbrk(objpath + 1, sep))) { |
| 1193 | b = (*p == '['); |
| 1194 | *p++ = 0; |
| 1195 | } // endif p |
| 1196 | |
| 1197 | if (!bp && *objpath != '[' && !IsNum(objpath)) { |
| 1198 | objp = new(g) JOBJECT; |
| 1199 | |
| 1200 | if (!Top) |
| 1201 | Top = objp; |
| 1202 | |
| 1203 | if (val) |
| 1204 | val->SetValue(objp); |
| 1205 | |
| 1206 | val = new(g) JVALUE; |
| 1207 | objp->SetKeyValue(g, val, objpath); |
| 1208 | } else { |
| 1209 | if (bp || *objpath == '[') { |
| 1210 | // Old style |
| 1211 | if (objpath[strlen(objpath) - 1] != ']') { |
| 1212 | snprintf(g->Message, sizeof(g->Message), "Invalid Table path %s", Objname); |
| 1213 | return true; |
| 1214 | } else if (!bp) |
| 1215 | objpath++; |
| 1216 | |
| 1217 | } // endif bp |
| 1218 | |
| 1219 | arp = new(g) JARRAY; |
| 1220 | |
| 1221 | if (!Top) |
| 1222 | Top = arp; |
| 1223 | |
| 1224 | if (val) |
| 1225 | val->SetValue(arp); |
| 1226 | |
| 1227 | val = new(g) JVALUE; |
| 1228 | i = atoi(objpath) - B; |
| 1229 | arp->SetArrayValue(g, val, i); |
| 1230 | arp->InitArray(g); |
| 1231 | } // endif objpath |
| 1232 | |
| 1233 | } // endfor p |
nothing calls this directly
no test coverage detected