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. 

2 yorum:

  1. Hocam merhaba gene ben :) bir sorum olacaktı. Kusura bakmayın rahatsız ediyorum sürekli ama aklıma başka bir yer gelmiyor hem bu sorum sizinle ilgili biraz hemen soruma geleyim.

    Geçen gün bana kitapların bulunduğu bir link vermiştiniz bende gidip hepsine baktım hepsi de İngilizce kitaplardı şimdi sorum şu

    - İngilizceniz çok iyi bir düzeyde olmalı çünkü Stackoverflow gibi bir sitede dolaşıyorsunuz verdiğiniz linklerden bunu anlıyorum. Siz İngilizce kitaplar mı okuyorsunuz ? Okuyorsanız hangilerini okuyorsunuz ? Verdiğiniz linklerde bulunan kitaplar sizin okuduklarınızla aynı mı ? Farklı bir şey tavsiye eder misiniz ?
    --> Ayrıca İngilizce kitap okuyorsanız, okuduğunuzu hemen anlıyor musunuz ? <--
    (Burası biraz önemli de benim için o yüzden oklarla gösterdim.)

    (Soru biraz uzun ama sizin dışınızda başka bildiğim kimse yok C++ diline hakim olan. Bu yüzden size soruyorum umarım cevaplarsınız teşekkür ederim:) )

    YanıtlaSil
  2. Merhaba, Özel bir şey okumuyorum ama okuduğumu anlıyorum diyelim :)

    YanıtlaSil