Store etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster
Store etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster

23 Aralık 2016 Cuma

Store

Giriş
Bir projede Cache diye isimlendirdiğimiz boost multi_index'e benzeye bir yapı kurduk. Tasarım kararları şöyleydi.

1. Cache N (örneğin 100) tane farklı veri tipi içerebilecek
2. Her veri tipi için kapasite belirlenebilecek. Yani en fazla N tane A tipi nesne saklanabilecek. Her A instance'ı için N tane de sample saklamayı düşündük ancak sonrada ihtiyacımız olmadığı ortaya çıktı.
3. Veri tipine dizi olarak erişilebilecek. Dizi bir LRU list olacak. Böylece kapasite üst sınırına erişirsek en eski nesne silinebilecek.
4. Veri tipine hash ile O (1)'de erişilebilecek. O (1)'de get, update, delete işlemleri yapılabilecek.

ObjectRoot Sınıfı
Sınıfın ismi konusunda çok kafa patlatmak gerekti :) Bu sınıf tüm veri tiplerinin ortak atası.

getId metodu
İmzası şöyle. Bu metod ile kaç numaralı veri tipi olduğu belirtilir. Store içinde ilgili StoreManager kolayca bulunur.
virtual int getId ();
hashCode metodu
İmzası şöyle
virtual int hashCode ();
equals metodu
İmzası şöyle. Kendi hash yapımızı kullandığımı için eşitlik kontrolü olarak bu metodu kullandık.
virtual bool equals (ObjectRoot* right);
clone metodu
İmzası şöyle.
virtual ObjectRoot* clone ();
Daha sonra bu metodu bir havuzdan nesne alacak hale getirdik. Havuza giren nesneleri temizlemek için reset diye bir metod yazmak gerekti.

IntrusiveTopicInstance Sınıfı
Linked list icin right ve left isimli iki pointer tutar.
Hash Index #1 icin h1right ve h2left isimli iki pointer tutar.

HasMap Sınıfı 
Bu sınıf ObjectRoot nesnelerini hash'leyerek saklar. STL hash yapılarını kullanmak yerine kendi sınıfımızı yazdik.

TopicManager Sınıfı
Bu sınıf hem sequential hem de hash indeks'i barındırır. Her manager nesnesine dışarıdan bir TopicDefinition nesnesi verilir. Bu yapıda 
int ID
int maxIntanceCount
int maxSampleCount
bool hasHashIndex

alanları bulunur.

TopicList Sınıfı 
Bu sınıf 100 tane Topic barındıran bir dizi. 

ProcessorList Sınıfı 
Bu sınıf 5 tane IProcessor barındıran bir dizi. 

IProcessor Arayüzü 
Sadece arayüz sağlar. 
İki tane önemli metodu var.
void Process (ObjectRoot* pObject)
void PreDispose (ObjectRoot * pObject);

Cache Sınıfı
Bu sınıf N tane TopicManager nesnesini barındırır.