2010-10-19 13 views
6

Wie Bitfelder in Scala zu simulieren? Die Bitfelder werden verwendet, um auf einige Bits eines Typs zuzugreifen (so in C link). Ich weiß, dass es möglich ist, mit Bit-Operatoren zu schreiben, aber ich denke, es gibt einen besseren Weg, wenn man die Leistung nicht berücksichtigt.Bitfelder in Scala

Danke für jeden Hinweis, der geben könnte.

Antwort

8

Wenn Sie nur einzelne Bits wollen, dann wird collection.BitSet für Sie arbeiten.

Wenn Sie eine richtige Bitfeldklasse wünschen, haben Sie aus zwei Gründen kein Glück. Erstens, weil Scala keine hat. Zweitens, denn selbst wenn dies der Fall wäre, wäre die Platzeinsparung wahrscheinlich nicht sehr beeindruckend, da der Overhead des umschließenden Objekts im Vergleich zu Ihren Bits wahrscheinlich groß wäre.

Es gibt ein paar Wege aus dieser Arbeit heraus: eine benutzerdefinierte Klasse, die eine Ganzzahl umschließt und Teile davon als Bitfelder bearbeiten kann; Wenn Sie die ganze Zahl speichern, speichern Sie sie einfach als primitiven int. Oder Sie könnten ein Array von Bitfeldstrukturen (beliebiger Länge) erstellen, die als ein Array von ganzen Zahlen implementiert sind. Aber so etwas ist nicht eingebaut; Sie müssen selbst rollen.

2

Leider nicht ... Die Shift-Operatoren und bitweise booleschen Operatoren sind so gut wie alles, was Sie haben.

+0

Mit meinem derzeitigen Kenntnisstand von Scala Ich weiß nicht, wie zu tun, aber ich denke, dass möglich ist, eine gewisse Struktur von Merkmalen verwenden. Danke für die Antwort :) – adelarsq

2

Es gibt auch diese Repo,

wortausgerichtet komprimierte Variante der Java bitset Klasse. Es verwendet ein 64-Bit-Run-Length Encoding (RLE) Komprimierungsschema.

http://code.google.com/p/javaewah/