KSquare Utilities
SVM289_MFS::Cache Class Reference

Public Member Functions

 Cache (kkint32 l, kkint32 size)
 
 ~Cache ()
 
kkint32 get_data (const kkint32 index, Qfloat **data, kkint32 len)
 
void swap_index (kkint32 i, kkint32 j)
 

Detailed Description

Definition at line 633 of file svm2.cpp.

Constructor & Destructor Documentation

SVM289_MFS::Cache::Cache ( kkint32  l,
kkint32  size 
)

Definition at line 676 of file svm2.cpp.

Referenced by SVM289_MFS::ONE_CLASS_Q::ONE_CLASS_Q(), SVM289_MFS::SVC_Q::SVC_Q(), and SVM289_MFS::SVR_Q::SVR_Q().

678  :
679  l (l_),
680  size (size_)
681 {
682  head = new head_t[l];
683  size /= sizeof (Qfloat);
684  size -= l * sizeof (head_t) / sizeof (Qfloat);
685  size = Max (size, 2 * (kkint32) l); // cache must be large enough for two columns
686  lru_head.next = lru_head.prev = &lru_head;
687 }
__int32 kkint32
Definition: KKBaseTypes.h:88
float Qfloat
Definition: svm2.h:287
T Max(T a, T b)
generic Max function, Both parameters must be of the same type.
Definition: KKBaseTypes.h:181
SVM289_MFS::Cache::~Cache ( )

Definition at line 691 of file svm2.cpp.

692 {
693  for (head_t* h = lru_head.next; h != &lru_head; h = h->next)
694  {delete (h->data); h->data = NULL;}
695  delete head; head = NULL;
696 }

Member Function Documentation

kkint32 Cache::get_data ( const kkint32  index,
Qfloat **  data,
kkint32  len 
)

Definition at line 720 of file svm2.cpp.

Referenced by SVM289_MFS::SVC_Q::get_Q(), SVM289_MFS::ONE_CLASS_Q::get_Q(), and SVM289_MFS::SVR_Q::get_Q().

724 {
725  head_t* h = &head[index];
726  if (h->len)
727  lru_delete (h);
728 
729  kkint32 more = len - h->len;
730 
731  if (more > 0)
732  {
733  // free old space
734  while (size < more)
735  {
736  head_t* old = lru_head.next;
737  lru_delete (old);
738  delete old->data; old->data = NULL;
739  size += old->len;
740  old->data = 0;
741  old->len = 0;
742  }
743 
744  // allocate new space
745  h->data = (Qfloat *)realloc(h->data, sizeof (Qfloat) * len);
746  size -= more;
747  SVM289_MFS::swap (h->len, len);
748  }
749 
750  lru_insert (h);
751  *data = h->data;
752  return len;
753 }
__int32 kkint32
Definition: KKBaseTypes.h:88
void swap(T &x, T &y)
Definition: svm2.h:283
float Qfloat
Definition: svm2.h:287
void Cache::swap_index ( kkint32  i,
kkint32  j 
)

Definition at line 757 of file svm2.cpp.

Referenced by SVM289_MFS::SVC_Q::swap_index(), and SVM289_MFS::ONE_CLASS_Q::swap_index().

758 {
759  if ( i == j)
760  return;
761 
762  if (head[i].len)
763  lru_delete (&head[i]);
764 
765  if (head[j].len)
766  lru_delete(&head[j]);
767 
768 
769  SVM289_MFS::swap (head[i].data, head[j].data);
770 
771  SVM289_MFS::swap (head[i].len, head[j].len);
772 
773  if (head[i].len)
774  lru_insert(&head[i]);
775 
776  if (head[j].len)
777  lru_insert(&head[j]);
778 
779  if (i > j)
780  SVM289_MFS::swap(i, j);
781 
782 
783  for (head_t* h = lru_head.next; h != &lru_head; h = h->next)
784  {
785  if (h->len > i)
786  {
787  if (h->len > j)
788  {
789  SVM289_MFS::swap (h->data[i], h->data[j]);
790  }
791  else
792  {
793  // give up
794  lru_delete (h);
795  delete h->data; h->data = NULL;
796  size += h->len;
797  h->data = 0;
798  h->len = 0;
799  }
800  }
801  }
802 } /* swap_index */
void swap(T &x, T &y)
Definition: svm2.h:283

The documentation for this class was generated from the following file: