Podobne
- Strona startowa
- R 17
- Grisham John Wspolnik (3)
- May Karol Winnetou tom I
- Glen Cook Zolnierze zyja
- Science Fiction (41) sierpien 2004
- Andre Norton Czarodziej ze Swiata Czarownic
- Ziemkiewicz Rafał Pięknie jest w dolinie
- tricks of the internet gurus
- Clarke Arthur C 2001 Odyseja Kosmiczna
- Weber Dav
- zanotowane.pl
- doc.pisz.pl
- pdf.pisz.pl
- alba.xlx.pl
Cytat
Do celu tam się wysiada. Lec Stanisław Jerzy (pierw. de Tusch-Letz, 1909-1966)
A bogowie grają w kości i nie pytają wcale czy chcesz przyłączyć się do gry (. . . ) Bogowie kpią sobie z twojego poukładanego życia (. . . ) nie przejmują się zbytnio ani naszymi planami na przyszłość ani oczekiwaniami. Gdzieś we wszechświecie rzucają kości i przypadkiem wypada twoja kolej. I odtąd zwyciężyć lub przegrać - to tylko kwestia szczęścia. Borys Pasternak
Idąc po kurzych jajach nie podskakuj. Przysłowie szkockie
I Herkules nie poradzi przeciwko wielu.
Dialog półinteligentów równa się monologowi ćwierćinteligenta. Stanisław Jerzy Lec (pierw. de Tusch - Letz, 1909-1966)
[ Pobierz całość w formacie PDF ]
.Wyjątek usuwamy, wywołując PyErr_Clear.Jeśliobiekt other_obj nie zawierał atrybutu this, to uaktualniamy other_obj tak, aby wskazywałdo wartości tego atrybutu.Następnie sprawdzamy czy other_obj jest łańcuchem.Jeśli tak, to wywołujemy funkcjęSWIG_GetPtr aby zamienić ten łańcuch na wskaznik typu _struct_servent_p.W przeciwnymrazie, zgłaszamy wyjątek typu TypeError, zapowiadający, że drugi obiekt musi być typuservent ("other object must be type servent").Skąd wiedzieliśmy, że SWIG_GetPtr powinien być użyty w ten sposób? Skąd wiedzieliśmy, żestruktura servent jest zwana _struct_servent_p? Otóż odpowiedz na te i inne pytania możnaznalezć studiując kod C zawarty w pliku servtyp_wrap.c.SWIG zawiera komentarze opisującesposób użycia SWIG_GetPtr, a także można zobaczyć, jak SWIG implementuje funkcje metod.Większość kodu dla __cmp__ jest wzięta bezpośrednio z pliku servtyp_wrap.c.Po uzyskaniu wskaznika do drugiej struktury servent, można dokonać porównania obu tychstruktur i zwrócić odpowiednią wartość dla potrzeb sortowania.W tym przykładzie, sortujemy woparciu o numer portu, a następnie nazwę protokołu.Metoda specjalna __cmp__ może być przetestowana w sposób następujący:$ pythonPython 1.5.2 (#1, Sep 17 1999, 20:15:36) [GCC egcs-2.91.6619990314/Linux]Copyright 1991-1995 Stichting Mathematisch Centrum, Amsterdam>>> import servtyp>>> i = servtyp.servent('smtp')>>> b = servtyp.servent(9)>>> print i == b>>> print i >> print i > b1>>> print str(i), " ? ", str(b)servent smtp port 25 proto tcp ? servent discard port 9 proto tcpObsługa indeksowania obiektów (object hashing)Obiekt w Pythonie, który udostępnia metodę specjalną __hash__ może być użyty jako klucz wsłowniku.Struktura servent nie jest zbyt użyteczna jako klucz w słowniku, ale w tympodrozdziale zostanie pokazane, w jaki sposób zaimplementować metodę specjalną __hash__przy pomocy SWIG.Podobnie jak dla metody specjalnej __cmp__, używamy dyrektywy %addmethods dla dodania__hash__ do struktury servent w pliku interfejsowym servtyp.i.Odpowiednia modyfikacjatego pliku wygląda następująco:return 1;} /* end __cmp__ */int __hash__() {unsigned long v = self->s_port;if(!strcasecmp(self->s_proto,"udp"))v = v + 0x100000;return v;} /* end __hash__ */PyObject *__str__() {Metoda specjalna __hash__ musi zwrócić tę samą wartość numeryczną dla tego samegoobiektu.W tym przykładzie, zakładamy, że funkcja mieszająca (ang.hash function) jest opartawyłącznie na wartości servent s_port i s_proto.Wiersz 'v = v + 0x100000' jest używanydo wygenerowania unikatowej wartości w sytuacji, kiedy numer portu jest taki sam, ale protokołysą różne.Po przebudowaniu modułu rozszerzenia, można przetestować go w Pythonie w sposóbnastępujący:Python 1.5.2 (#1, Sep 17 1999, 20:15:36) [GCC egcs-2.91.6619990314/Linux]Copyright 1991-1995 Stichting Mathematisch Centrum, Amsterdam>>> import servtyp>>> i = servtyp.servent('smtp')>>> b = servtyp.servent(22)>>> testDict = {}>>> testDict[i] = "email">>> testDict[b] = "ssh">>> for v in testDict.keys(): print str(v)," ==> ",testDict[v].servent ssh port 22 proto tcp ==> sshservent smtp port 25 proto tcp ==> email>>>>> print testDict[i]'email'Użycie destruktora obiektu do robienia porządkówNasz ostatni przykład z użyciem SWIG pokazuje, jak użyć destruktora obiektu do zrobieniaporządków z efektami ubocznymi, takimi jak zamknięcie otwartego pliku lub iteracja biblioteki C.W tym przykładzie utworzymy inny obiekt iteratora.Obejmie on w kapsułkę funkcjesetservent, getservent i endservent.Utworzymy nowy obiekt iteratora, zwany ServentIterator.Zwróci on obiekty servent zeswojej metody specjalnej __getitem__.Są to końcowe zmiany wprowadzone w plikuinterfejsowym servtyp.i:struct servent_alias {char **aliases;};struct ServentIterator {int isopen;};%}Najpierw dodajemy definicję w C dla struktury ServentIterator w sekcji otoczki plikuinterfejsowego.Struktura ServentIterator ma jeden atrybut isopen, który jest niezerowy,jeśli setservent został wywołany.Pod koniec pliku interfejsowego servent
[ Pobierz całość w formacie PDF ]