int PNode_decrementSize(PNode *self) { if (PNode_size(self)) { return PNode_setSize_(self, PNode_size(self) - 1); } else { printf("PNode warning: attempt to decrement pnode size of zero at pid path: %s\n", Datum_data(self->pidPath)); } return 0; }
int VertexServer_api_show(VertexServer *self) { PNode *node = PDB_allocNode(self->pdb); if (VertexServer_api_setCursorPathOnNode_(self, node)) return 2; Datum_appendLong_(self->result, (long)PNode_size(node)); return 0; }
int PNode_op_rm(PNode *self, Datum *d) { PQuery *q = PNode_startQuery(self); Datum *k; long size = PNode_size(self); long removeCount = 0; if(!q) PNode_first(self); while (k = PQuery_key(q)) { PDB_willWrite(self->pdb); if(!StoreCursor_remove(self->storeCursor)) break; // HACK to avoid skipping a step by backing up in the reverse enum direction before calling PQuery_enumerate if(PQuery_stepDirection(q) == 1) { StoreCursor_previous(self->storeCursor); } removeCount ++; //count += PNode_removeAt_(self, k); PQuery_enumerate(q); } PNode_setSize_(self, size - removeCount); yajl_gen_integer(self->yajl, removeCount); Datum_appendYajl_(d, self->yajl); //Datum_appendLong_(d, removeCount); return 0; }
int PNode_op_sizes(PNode *self, Datum *d) { PNode *tmpNode = PDB_allocNode(self->pdb); Datum *k; PQuery *q = PNode_startQuery(self); yajl_gen_map_open(self->yajl); while (k = PQuery_key(q)) { if(!Datum_beginsWithCString_(k, "_")) { yajl_gen_datum(self->yajl, PNode_key(self)); PNode_setPid_(tmpNode, PNode_value(self)); yajl_gen_integer(self->yajl, PNode_size(tmpNode)); } if (q) { PQuery_enumerate(q); } else { PNode_next(self); } } yajl_gen_map_close(self->yajl); Datum_appendYajl_(d, self->yajl); return 0; }
long PNode_nodeSizeAtCursor(PNode *self) { // carefull - this temporarilly hacks the sizePath long size; Datum *otherPid = PNode_value(self); Datum_copy_(self->sizePath, otherPid); Datum_appendCString_(self->sizePath, "/m/size"); size = PNode_size(self); PNode_setPathsFromPid(self); return size; }
int PNode_incrementSize(PNode *self) { long n = PNode_size(self) + 1; return PNode_setSize_(self, n); }
int VertexServer_api_amchart(VertexServer *self) { Datum *slot1 = HttpRequest_queryValue_(self->httpRequest, "slot1"); //Datum *slot2 = HttpRequest_queryValue_(self->httpRequest, "slot2"); //Datum *slot3 = HttpRequest_queryValue_(self->httpRequest, "slot3"); Datum *subpath = HttpRequest_queryValue_(self->httpRequest, "subpath"); PNode *node = PDB_allocNode(self->pdb); PQuery *q = PNode_query(node); VertexServer_setupPQuery_(self, q); PNode *tmpNode = PDB_allocNode(self->pdb); Datum *d = self->result; Datum *title = 0x0; //int isFirst = 1; if (PNode_moveToPathIfExists_(node, HttpRequest_uriPath(self->httpRequest)) != 0) { VertexServer_setErrorCString_(self, "path does not exist: "); VertexServer_appendError_(self, HttpRequest_uriPath(self->httpRequest)); return -1; } Datum_appendCString_(d, "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"); Datum_appendCString_(d, "<chart approx_count=\""); // series ----------------- if(Datum_size(subpath)) PNode_moveToPathIfExists_(node, subpath); Datum_appendLong_(d, PNode_size(node)); Datum_appendCString_(d, "\">\n"); PNode_startQuery(node); PNode_amSeries(node, d); PNode_moveToPathIfExists_(node, HttpRequest_uriPath(self->httpRequest)); // series ----------------- Datum_appendCString_(d, "<graphs>\n"); PNode_first(node); if(Datum_size(subpath)) { Datum *k; while(k = PNode_key(node)) { Datum *title = Datum_poolNew(); PNode_setPid_(tmpNode, PNode_value(node)); PNode_moveToSubpathIfExists_(tmpNode, subpath); Datum_encodeUri(k); Datum_copy_(title, k); //Datum_appendCString_(title, "-"); //Datum_append_(title, slot1); PNode_amGraphKey_(tmpNode, title, slot1, d); //printf("graph: %s\n", Datum_data(k)); PNode_next(node); } } else if(Datum_size(slot1)) { char slotKey[64]; int slotNumber = 1; for (;;) { sprintf(slotKey, "slot%i", slotNumber); Datum *slotName = HttpRequest_queryValue_(self->httpRequest, slotKey); if(Datum_size(slotName) == 0) break; PNode_amGraphKey_(node, title, slotName, d); slotNumber ++; } } Datum_appendCString_(d, "</graphs>\n"); Datum_appendCString_(d, "</chart>\n"); HttpResponse_setContentType_(self->httpResponse, "text/xml"); //HttpResponse_setContentType_(self->httpResponse, "text/xml; charset=utf-8"); return 0; }