Commit 13ea20be authored by Claes Sjofors's avatar Claes Sjofors

sev_server: map changed to co_tree

parent 5541f8e8
...@@ -26,6 +26,7 @@ ...@@ -26,6 +26,7 @@
#include "co_time.h" #include "co_time.h"
#include "co_error.h" #include "co_error.h"
#include "co_cnf.h" #include "co_cnf.h"
#include "co_tree.h"
#include "rt_qcom.h" #include "rt_qcom.h"
#include "rt_qcom_msg.h" #include "rt_qcom_msg.h"
#include "rt_ini_event.h" #include "rt_ini_event.h"
...@@ -41,6 +42,32 @@ ...@@ -41,6 +42,32 @@
#define sev_cGarbageInterval 120 #define sev_cGarbageInterval 120
static int sev_comp_item(tree_sTable *tp, tree_sNode *x, tree_sNode *y)
{
sev_sItem *xp = (sev_sItem *) x;
sev_sItem *yp = (sev_sItem *) y;
if (xp->key.oid.vid > yp->key.oid.vid)
return 1;
if (xp->key.oid.vid < yp->key.oid.vid)
return -1;
if (xp->key.oid.oix > yp->key.oid.oix)
return 1;
if (xp->key.oid.oix < yp->key.oid.oix)
return -1;
if ( strcmp( xp->key.aname, yp->key.aname) > 0)
return 1;
if ( strcmp( xp->key.aname, yp->key.aname) < 0)
return -1;
return 0;
}
int sev_server::init( int noneth) int sev_server::init( int noneth)
{ {
qcom_sNode node; qcom_sNode node;
...@@ -104,9 +131,16 @@ int sev_server::init( int noneth) ...@@ -104,9 +131,16 @@ int sev_server::init( int noneth)
m_db->get_items( &m_sts); m_db->get_items( &m_sts);
m_item_key = tree_CreateTable(&sts, sizeof(sev_sItemKey), offsetof(sev_sItem, key), sizeof(sev_sItem), 100, sev_comp_item);
for ( unsigned int i = 0; i < m_db->m_items.size(); i++) { for ( unsigned int i = 0; i < m_db->m_items.size(); i++) {
sev_item_key items_key( m_db->m_items[i].oid, m_db->m_items[i].attr[0].aname); sev_sItemKey ik;
m_item_key[items_key] = i; sev_sItem *ip;
ik.oid = m_db->m_items[i].oid;
strcpy( ik.aname, m_db->m_items[i].attr[0].aname);
ip = (sev_sItem *) tree_Insert(&sts, m_item_key, &ik);
ip->idx = i;
} }
// Create a queue to server // Create a queue to server
...@@ -429,6 +463,7 @@ int sev_server::mainloop() ...@@ -429,6 +463,7 @@ int sev_server::mainloop()
int sev_server::check_histitems( sev_sMsgHistItems *msg, unsigned int size) int sev_server::check_histitems( sev_sMsgHistItems *msg, unsigned int size)
{ {
pwr_tStatus sts;
unsigned int idx; unsigned int idx;
pwr_tDeltaTime storagetime; pwr_tDeltaTime storagetime;
int item_cnt = (size - sizeof(sev_sMsgHistItems)) / sizeof(sev_sHistItem) + 1; int item_cnt = (size - sizeof(sev_sMsgHistItems)) / sizeof(sev_sHistItem) + 1;
...@@ -462,8 +497,13 @@ int sev_server::check_histitems( sev_sMsgHistItems *msg, unsigned int size) ...@@ -462,8 +497,13 @@ int sev_server::check_histitems( sev_sMsgHistItems *msg, unsigned int size)
msg->Items[i].deadband, msg->Items[i].options, &idx); msg->Items[i].deadband, msg->Items[i].options, &idx);
if ( EVEN(m_sts)) return m_sts; if ( EVEN(m_sts)) return m_sts;
sev_item_key item_key( msg->Items[i].oid, msg->Items[i].attr[0].aname); sev_sItemKey ik;
m_item_key[item_key] = idx; sev_sItem *ip;
ik.oid = msg->Items[i].oid;
strcpy( ik.aname, msg->Items[i].attr[0].aname);
ip = (sev_sItem *) tree_Insert(&sts, m_item_key, &ik);
ip->idx = idx;
} }
m_db->m_items[idx].sevid = msg->Items[i].sevid; m_db->m_items[idx].sevid = msg->Items[i].sevid;
...@@ -471,7 +511,15 @@ int sev_server::check_histitems( sev_sMsgHistItems *msg, unsigned int size) ...@@ -471,7 +511,15 @@ int sev_server::check_histitems( sev_sMsgHistItems *msg, unsigned int size)
m_refid[sevid] = idx; m_refid[sevid] = idx;
} }
printf( "---- Node up ----\n"); #if 0
sev_sItem *ip = (sev_sItem *)tree_Minimum(&sts, m_item_key);
while ( ip) {
printf( "ItemKey: %d,%d Name %s idx: %d\n", ip->key.oid.vid, ip->key.oid.oix, ip->key.aname, ip->idx);
ip = (sev_sItem *)tree_Successor(&sts, m_item_key, ip);
}
#endif
printf( "---- Node up (%d) ----\n", nid);
// for ( iterator_refid it = m_refid.begin(); it != m_refid.end(); it++) // for ( iterator_refid it = m_refid.begin(); it != m_refid.end(); it++)
// printf( "Refid: %d,%d Name %s\n", it->first.id.nid, it->first.id.rix, m_db->m_items[it->second].oname); // printf( "Refid: %d,%d Name %s\n", it->first.id.nid, it->first.id.rix, m_db->m_items[it->second].oname);
...@@ -512,16 +560,21 @@ int sev_server::send_histdata( qcom_sQid tgt, sev_sMsgHistDataGetRequest *rmsg, ...@@ -512,16 +560,21 @@ int sev_server::send_histdata( qcom_sQid tgt, sev_sMsgHistDataGetRequest *rmsg,
pwr_tStatus sts, lsts; pwr_tStatus sts, lsts;
pwr_tTime starttime, endtime; pwr_tTime starttime, endtime;
sev_item_key item_key( rmsg->Oid, rmsg->AName); sev_sItemKey ik;
iterator_item_key it = m_item_key.find( item_key); sev_sItem *ip;
if ( it == m_item_key.end())
ik.oid = rmsg->Oid;
strcpy( ik.aname, rmsg->AName);
ip = (sev_sItem *) tree_Find(&sts, m_item_key, &ik);
if ( !ip)
m_sts = SEV__NOSUCHITEM; m_sts = SEV__NOSUCHITEM;
else else
m_sts = SEV__SUCCESS; m_sts = SEV__SUCCESS;
int idx = 0; int idx = 0;
if ( ODD(m_sts)) { if ( ODD(m_sts)) {
idx = it->second; idx = ip->idx;
starttime = net_NetTimeToTime( &rmsg->StartTime); starttime = net_NetTimeToTime( &rmsg->StartTime);
endtime = net_NetTimeToTime( &rmsg->EndTime); endtime = net_NetTimeToTime( &rmsg->EndTime);
......
...@@ -47,37 +47,30 @@ class sev_refid { ...@@ -47,37 +47,30 @@ class sev_refid {
pwr_tRefId id; pwr_tRefId id;
}; };
class sev_item_key { // Struct for binary tree item
public: typedef struct {
sev_item_key( pwr_tOid oid, char *aname) : m_oid(oid) pwr_tOid oid;
{ pwr_tAName aname;
strncpy( m_aname, aname, sizeof(m_aname)); } sev_sItemKey;
}
bool operator<(const sev_item_key& x) const { typedef struct {
if ( m_oid.vid < x.m_oid.vid) tree_sNode node;
return true; sev_sItemKey key;
if ( m_oid.oix < x.m_oid.oix) int idx;
return true; } sev_sItem;
return strcmp( m_aname, x.m_aname);
}
pwr_tOid m_oid;
pwr_tAName m_aname;
};
class sev_server { class sev_server {
public: public:
sev_server() : m_server_status(0), m_msg_id(0) {} sev_server() : m_server_status(0), m_item_key(0), m_msg_id(0) {}
typedef map<sev_refid, unsigned int>::iterator iterator_refid; typedef map<sev_refid, unsigned int>::iterator iterator_refid;
typedef map<sev_item_key, unsigned int>::iterator iterator_item_key;
pwr_tStatus m_sts; pwr_tStatus m_sts;
pwr_tStatus m_server_status; pwr_tStatus m_server_status;
vector<sev_node> m_nodes; vector<sev_node> m_nodes;
map<sev_refid, unsigned int> m_refid; map<sev_refid, unsigned int> m_refid;
map<sev_item_key, unsigned int> m_item_key; tree_sTable *m_item_key;
unsigned int m_msg_id; unsigned int m_msg_id;
sev_db *m_db; sev_db *m_db;
int m_noneth; int m_noneth;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment