Sarmalayıcı kütüphane

Sarmalayıcı kütüphaneler (veya kütüphane sarmalayıcıları; ), bir kütüphanenin mevcut arayüzünü uyumlu bir arayüze çeviren ince bir kod katmanından (bir "dolgu" ) oluşur. Bu, çeşitli nedenlerle yapılır:

 Kötü tasarlanmış veya karmaşık bir arayüzü iyileştirmek için
 Aksi takdirde birlikte çalışamayacak kodların birlikte çalışmasına izin vermek (örneğin uyumsuz veri biçimleri)
 Dil ve/veya çalıştırma ortamı (runtime) arası birlikte çalışabilirliği etkinleştirmek için

Sarmalayıcı kütüphaneler adaptör, faça ve daha az ölçüde vekil tasarım desenleri kullanılarak uygulanabilir.

Yapı ve uygulama 
Bir sarmalayıcı kütüphanenin uygulanma şekli, yazıldığı ortama ve ele almayı amaçladığı senaryolara bağlı olarak oldukça özeldir. Bu durum özellikle çapraz dil/çalışma zamanı birlikte çalışabilirliği söz konusu olduğunda geçerlidir.

Örnek 
Aşağıda yaygın bir sarmalayıcı kütüphane uygulamasının genel bir örneği verilmektedir. Bu örnekte, bir C++ arayüzü, bir C dili arayüzü etrafında bir "sarmalayıcı" görevi görür.

C arayüzü 
int pthread_mutex_init(pthread_mutex_t * mutex , pthread_mutexattr_t * attr);
int pthread_mutex_destroy (pthread_mutex_t * mutex);
int pthread_mutex_lock (pthread_mutex_t * mutex );
int pthread_mutex_unlock (pthread_mutex_t * mutex );

C++ sarmalayıcı 
class Mutex
{
     pthread_mutex_t mutex;

public:
     Mutex() 
     {
          pthread_mutex_init(&mutex, 0);
     }

     ~Mutex()
     {
          pthread_mutex_destroy(&mutex);
     }

private:
     friend class Lock;

     void lock()
     {
          pthread_mutex_lock(&mutex);
     }

     void unlock()
     {
          pthread_mutex_unlock(&mutex);
     }
};

class Lock
{
private:
      Mutex &mutex;

public:
      Lock(Mutex &mutex): mutex{mutex}
      {
            mutex.lock();
      }

      ~Lock()
      {
            mutex.unlock();
      }
};

Orijinal C arayüzü, özellikle kütüphane kullanıcılarının zaten kilitli olan bir muteksin kilidini açmayı unutması durumunda hataya açık olarak kabul edilebilir. Yeni arayüz, 'lerin sonunda kilidinin açılmasını ve  nesnelerinin otomatik olarak serbest bırakılmasını sağlamak için yeni  ve  sınıflarında RAII (Resource Acquisition is Initialization) özelliğini etkin bir şekilde kullanır.

Yukarıdaki kod,  kütüphanesinin bir parçası olan  ve  uygulamalarını yakından taklit eder.

Sürücü sarmalayıcıları

Çapraz dil/çalışma zamanı birlikte çalışabilirliği 
Bazı sarmalayıcı kütüphaneler, bir istemci uygulaması ile uyumsuz bir teknoloji kullanılarak yazılmış bir kütüphane arasında köprü görevi görmek için vardır. Örneğin, bir Java uygulamasının bir sistem çağrısı çalıştırması gerekebilir. Ancak sistem çağrıları genellikle C kütüphanesi işlevleri olarak gösterilir. Bu sorunu çözmek için Java, bu sistem çağrılarını bir Java uygulamasından çağrılabilir hale getiren sarmalayıcı kütüphaneler kullanır.

Bunu başarmak için, Java gibi diller bunu mümkün kılan yabancı fonksiyon arayüzü adı verilen bir mekanizma sağlar. Bu mekanizmaların bazı örnekleri şunlardır:

 Java Native Interface (JNI)
 Java Native Access (JNA)
 A foreign function library for Python
 Managed Extensions
 Simplified Wrapper and Interface Generator (SWIG)

Mevcut sarmalayıcı kütüphaneler 
Mevcut sarmalayıcı kütüphanelere bazı örnekler:

Ayrıca bakınız
 Sarmalayıcı fonksiyon
 Sarmalayıcı desen
 Yapıştırıcı kodu

Bilgisayar kütüphaneleri