Added: Bits unit
This commit is contained in:
parent
00de61b4a8
commit
e0fff9fd77
35
Test/X2UtBitsTest.cfg
Normal file
35
Test/X2UtBitsTest.cfg
Normal file
@ -0,0 +1,35 @@
|
|||||||
|
-$A8
|
||||||
|
-$B-
|
||||||
|
-$C+
|
||||||
|
-$D+
|
||||||
|
-$E-
|
||||||
|
-$F-
|
||||||
|
-$G+
|
||||||
|
-$H+
|
||||||
|
-$I+
|
||||||
|
-$J+
|
||||||
|
-$K-
|
||||||
|
-$L+
|
||||||
|
-$M-
|
||||||
|
-$N+
|
||||||
|
-$O+
|
||||||
|
-$P+
|
||||||
|
-$Q-
|
||||||
|
-$R+
|
||||||
|
-$S-
|
||||||
|
-$T-
|
||||||
|
-$U-
|
||||||
|
-$V+
|
||||||
|
-$W-
|
||||||
|
-$X+
|
||||||
|
-$YD
|
||||||
|
-$Z1
|
||||||
|
-cg
|
||||||
|
-AWinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE;
|
||||||
|
-H+
|
||||||
|
-W+
|
||||||
|
-M
|
||||||
|
-$M16384,1048576
|
||||||
|
-K$00400000
|
||||||
|
-LE"c:\delphi6\Projects\Bpl"
|
||||||
|
-LN"c:\delphi6\Projects\Bpl"
|
164
Test/X2UtBitsTest.dof
Normal file
164
Test/X2UtBitsTest.dof
Normal file
@ -0,0 +1,164 @@
|
|||||||
|
[FileVersion]
|
||||||
|
Version=6.0
|
||||||
|
[Compiler]
|
||||||
|
A=8
|
||||||
|
B=0
|
||||||
|
C=1
|
||||||
|
D=1
|
||||||
|
E=0
|
||||||
|
F=0
|
||||||
|
G=1
|
||||||
|
H=1
|
||||||
|
I=1
|
||||||
|
J=1
|
||||||
|
K=0
|
||||||
|
L=1
|
||||||
|
M=0
|
||||||
|
N=1
|
||||||
|
O=1
|
||||||
|
P=1
|
||||||
|
Q=0
|
||||||
|
R=1
|
||||||
|
S=0
|
||||||
|
T=0
|
||||||
|
U=0
|
||||||
|
V=1
|
||||||
|
W=0
|
||||||
|
X=1
|
||||||
|
Y=1
|
||||||
|
Z=1
|
||||||
|
ShowHints=1
|
||||||
|
ShowWarnings=1
|
||||||
|
UnitAliases=WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE;
|
||||||
|
[Linker]
|
||||||
|
MapFile=0
|
||||||
|
OutputObjs=0
|
||||||
|
ConsoleApp=1
|
||||||
|
DebugInfo=0
|
||||||
|
RemoteSymbols=0
|
||||||
|
MinStackSize=16384
|
||||||
|
MaxStackSize=1048576
|
||||||
|
ImageBase=4194304
|
||||||
|
ExeDescription=
|
||||||
|
[Directories]
|
||||||
|
OutputDir=
|
||||||
|
UnitOutputDir=
|
||||||
|
PackageDLLOutputDir=
|
||||||
|
PackageDCPOutputDir=
|
||||||
|
SearchPath=
|
||||||
|
Packages=vcl;rtl;dbrtl;vcldb;vclx;dss;dsnapcrba;dsnapcon;inetdb;webdsnap;websnap;dbxcds;Irc;parsdpk;hotspotter
|
||||||
|
Conditionals=
|
||||||
|
DebugSourceDirs=
|
||||||
|
UsePackages=0
|
||||||
|
[Parameters]
|
||||||
|
RunParams=ip-to-country.csv countries.csv geo.db
|
||||||
|
HostApplication=
|
||||||
|
Launcher=
|
||||||
|
UseLauncher=0
|
||||||
|
DebugCWD=
|
||||||
|
[Version Info]
|
||||||
|
IncludeVerInfo=1
|
||||||
|
AutoIncBuild=0
|
||||||
|
MajorVer=1
|
||||||
|
MinorVer=0
|
||||||
|
Release=0
|
||||||
|
Build=0
|
||||||
|
Debug=0
|
||||||
|
PreRelease=0
|
||||||
|
Special=0
|
||||||
|
Private=0
|
||||||
|
DLL=0
|
||||||
|
Locale=1043
|
||||||
|
CodePage=1252
|
||||||
|
[Version Info Keys]
|
||||||
|
CompanyName=
|
||||||
|
FileDescription=
|
||||||
|
FileVersion=1.0.0.0
|
||||||
|
InternalName=
|
||||||
|
LegalCopyright=
|
||||||
|
LegalTrademarks=
|
||||||
|
OriginalFilename=
|
||||||
|
ProductName=
|
||||||
|
ProductVersion=1.0.0.0
|
||||||
|
Comments=
|
||||||
|
[Excluded Packages]
|
||||||
|
C:\Delphi6\Bin\dcldb60.bpl=Borland Database Components
|
||||||
|
C:\Program Files\madCollection\madBasic\Delphi 6\madHelp_.bpl=madHelp 1.1 · www.madshi.net
|
||||||
|
c:\delphi6\Projects\Bpl\X2CompsD6.bpl=X²Software Components - Designtime
|
||||||
|
c:\delphi6\Projects\Bpl\VirtualTreesD6D.bpl=Virtual Treeview
|
||||||
|
c:\delphi6\Bin\dcl31w60.bpl=Delphi 1.0 Compatibility Components
|
||||||
|
c:\delphi6\Bin\dclact60.bpl=Borland ActionBar Components
|
||||||
|
c:\delphi6\Bin\applet60.bpl=Borland Control Panel Applet Package
|
||||||
|
C:\Delphi6\Bin\dbx60.bpl=Borland SQL Explorer UI Package
|
||||||
|
C:\Delphi6\Projects\Bpl\tb2k_d6.bpl=Toolbar2000 Components (Jordan Russell)
|
||||||
|
c:\delphi6\Projects\Bpl\tb2kdsgn_d6.bpl=Toolbar2000 Design Package (Jordan Russell)
|
||||||
|
c:\delphi6\Bin\DCLNMF60.bpl=NetMasters Fastnet Tools
|
||||||
|
c:\delphi6\Bin\dclado60.bpl=Borland ADO DB Components
|
||||||
|
c:\delphi6\Bin\dclclxdb60.bpl=Borland CLX Database Components
|
||||||
|
C:\Delphi6\Bin\dclclxstd60.bpl=Borland CLX Standard Components
|
||||||
|
c:\delphi6\Bin\dclie60.bpl=Internet Explorer Components
|
||||||
|
C:\Delphi6\Projects\Bpl\aSQLitepkg.bpl=Aducom Software -- SQLite RunTime Components
|
||||||
|
c:\delphi6\Projects\Bpl\asqlite.bpl=Aducom Software -- SQLite Design Time Components
|
||||||
|
c:\delphi6\Projects\Bpl\PCtrlExd6.bpl=PageControlEx
|
||||||
|
c:\delphi6\Projects\Bpl\JvCoreD6D.bpl=JVCL Core Components
|
||||||
|
c:\delphi6\Projects\Bpl\JvSystemD6D.bpl=JVCL System Components
|
||||||
|
c:\delphi6\Projects\Bpl\JvStdCtrlsD6D.bpl=JVCL Standard Controls
|
||||||
|
c:\delphi6\Projects\Bpl\JvCtrlsD6D.bpl=JVCL Visual Controls
|
||||||
|
c:\delphi6\Projects\Bpl\JvCmpD6D.bpl=JVCL Non-Visual Components
|
||||||
|
c:\delphi6\Projects\Bpl\JvCustomD6D.bpl=JVCL Custom Controls
|
||||||
|
c:\delphi6\Projects\Bpl\JvDlgsD6D.bpl=JVCL Dialog Components
|
||||||
|
c:\delphi6\Projects\Bpl\JvCryptD6D.bpl=JVCL Encryption and Compression Components
|
||||||
|
c:\delphi6\Projects\Bpl\JvMMD6D.bpl=JVCL Multimedia and Image Components
|
||||||
|
c:\delphi6\Projects\Bpl\JvNetD6D.bpl=JVCL Network Components
|
||||||
|
c:\delphi6\Projects\Bpl\JvAppFrmD6D.bpl=JVCL Application and Form Components
|
||||||
|
c:\delphi6\Projects\Bpl\JvDBD6D.bpl=JVCL Database Components
|
||||||
|
c:\delphi6\Projects\Bpl\JvBDED6D.bpl=JVCL BDE Components
|
||||||
|
c:\delphi6\Projects\Bpl\JvInterpreterD6D.bpl=JVCL Interpreter Components
|
||||||
|
c:\delphi6\Projects\Bpl\JvBandsD6D.bpl=JVCL Band Objects
|
||||||
|
c:\delphi6\Projects\Bpl\JvPluginD6D.bpl=JVCL Plugin Components
|
||||||
|
c:\delphi6\Projects\Bpl\JvJansD6D.bpl=JVCL Jans Components
|
||||||
|
c:\delphi6\Projects\Bpl\JvGlobusD6D.bpl=JVCL Globus Components
|
||||||
|
c:\delphi6\Projects\Bpl\JvPrintPreviewD6D.bpl=JVCL Print Preview Components
|
||||||
|
c:\delphi6\Projects\Bpl\JvPageCompsD6D.bpl=JVCL Page Style Components
|
||||||
|
c:\delphi6\Projects\Bpl\JvValidatorsD6D.bpl=JVCL Validators and Error Provider Components
|
||||||
|
c:\delphi6\Projects\Bpl\JvUIBD6D.bpl=JVCL Unified Interbase Components
|
||||||
|
c:\delphi6\Projects\Bpl\JvWizardD6D.bpl=JVCL Wizard Design Time Package
|
||||||
|
c:\delphi6\Projects\Bpl\JvTimeFrameworkD6D.bpl=JVCL Time Framework
|
||||||
|
c:\delphi6\Projects\Bpl\JvHMID6D.bpl=JVCL HMI Controls design time unit
|
||||||
|
c:\delphi6\Projects\Bpl\JvManagedThreadsD6D.bpl=JVCL Managed Threads
|
||||||
|
c:\delphi6\Projects\Bpl\JvXPCtrlsD6D.bpl=JVCL XP Controls
|
||||||
|
c:\delphi6\Projects\Bpl\JvDockingD6D.bpl=JVCL Docking Components
|
||||||
|
c:\delphi6\Projects\Bpl\JvDotNetCtrlsD6D.bpl=JVCL DotNet Controls
|
||||||
|
c:\delphi6\Projects\Bpl\dclIndyCore60.bpl=Indy 10 Core Design Time
|
||||||
|
c:\delphi6\Projects\Bpl\dclIndyProtocols60.bpl=Indy 10 Protocols Design Time
|
||||||
|
c:\delphi6\Projects\Bpl\SysILS.bpl=System ImageList
|
||||||
|
c:\delphi6\Projects\Bpl\DragDropD6.bpl=Drag and Drop Component Suite
|
||||||
|
C:\Projects\Components\DevExpress\OrgChart Suite\Lib\dcldxOrgCD6.bpl=ExpressOrgChart by Developer Express Inc.
|
||||||
|
C:\Projects\Components\DevExpress\OrgChart Suite\Lib\dcldxDBOrD6.bpl=ExpressDBOrgChart by Developer Express Inc.
|
||||||
|
c:\delphi6\Projects\Bpl\BalloonD6.bpl=Balloon 2.0
|
||||||
|
c:\delphi6\Projects\Bpl\DIPasDocD6.bpl=DiPasDoc - Designtime
|
||||||
|
C:\Delphi6\Projects\Bpl\DIContainers_D6.bpl=The Delphi Inspiration -- DIContainers
|
||||||
|
c:\delphi6\Bin\dclshlctrls60.bpl=Shell Control Property and Component Editors
|
||||||
|
c:\delphi6\Bin\dclsmp60.bpl=Borland Sample Components
|
||||||
|
c:\delphi6\Bin\dclbde60.bpl=Borland BDE DB Components
|
||||||
|
c:\delphi6\Bin\dclcds60.bpl=Borland Base Cached ClientDataset Component
|
||||||
|
C:\Delphi6\Bin\dclmid60.bpl=Borland MyBase DataAccess Components
|
||||||
|
c:\delphi6\Bin\dclbdecds60.bpl=Borland Local BDE ClientDataset Components
|
||||||
|
c:\delphi6\Bin\dclib60.bpl=InterBase Data Access Components
|
||||||
|
c:\delphi6\Bin\DBWEBXPRT.BPL=Borland Web Wizard Package
|
||||||
|
c:\delphi6\Bin\dcloffice2k60.bpl=Microsoft Office 2000 Sample Automation Server Wrapper Components
|
||||||
|
c:\delphi6\Bin\dcltee60.bpl=TeeChart Components
|
||||||
|
c:\delphi6\Bin\dcltqr60.bpl=TeeChart for QuickReport Components
|
||||||
|
c:\delphi6\Bin\dclnet60.bpl=Borland Internet Components
|
||||||
|
c:\delphi6\Bin\dclite60.bpl=Borland Integrated Translation Environment
|
||||||
|
c:\delphi6\Bin\dcldbx60.bpl=Borland dbExpress Components
|
||||||
|
c:\delphi6\Bin\dclsoap60.bpl=Borland SOAP Components
|
||||||
|
c:\delphi6\Bin\dclocx60.bpl=Borland Sample Imported ActiveX Controls
|
||||||
|
c:\delphi6\Bin\dcldbxcds60.bpl=Borland Local DBX ClientDataset Components
|
||||||
|
C:\WINDOWS\System32\ibevnt60.bpl=Borland Interbase Event Alerter Component
|
||||||
|
C:\Program Files\madCollection\madRemote\Delphi 6\madRemote_.bpl=madRemote 1.1b · www.madshi.net
|
||||||
|
C:\Program Files\madCollection\madKernel\Delphi 6\madKernel_.bpl=madKernel 1.3 · www.madshi.net
|
||||||
|
C:\Program Files\madCollection\madCodeHook\Delphi 6\madCodeHook_.bpl=madCodeHook 2.1b · www.madshi.net
|
||||||
|
C:\Program Files\madCollection\madSecurity\Delphi 6\madSecurity_.bpl=madSecurity 1.1n · www.madshi.net
|
||||||
|
C:\Program Files\madCollection\madShell\Delphi 6\madShell_.bpl=madShell 1.3k · www.madshi.net
|
||||||
|
c:\delphi6\Projects\Bpl\PsychoTidyD6.bpl=PsychoTidy IDE Expert
|
24
Test/X2UtBitsTest.dpr
Normal file
24
Test/X2UtBitsTest.dpr
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
program X2UtBitsTest;
|
||||||
|
|
||||||
|
{$APPTYPE CONSOLE}
|
||||||
|
|
||||||
|
uses
|
||||||
|
X2UtBits;
|
||||||
|
|
||||||
|
var
|
||||||
|
iTest: Integer;
|
||||||
|
bTest: T32Bits absolute iTest;
|
||||||
|
sTest: String;
|
||||||
|
|
||||||
|
begin
|
||||||
|
Randomize();
|
||||||
|
iTest := Random(MaxInt);
|
||||||
|
sTest := BitsToString(bTest, bs32);
|
||||||
|
|
||||||
|
WriteLn('Value: ', iTest);
|
||||||
|
WriteLn('Bits: ', sTest);
|
||||||
|
|
||||||
|
bTest := StringToBits(sTest);
|
||||||
|
WriteLn('Reversed: ', iTest);
|
||||||
|
ReadLn;
|
||||||
|
end.
|
130
X2UtBits.pas
Normal file
130
X2UtBits.pas
Normal file
@ -0,0 +1,130 @@
|
|||||||
|
{
|
||||||
|
:: X2UtBits provides declarations and functions for easy bit manipulation
|
||||||
|
:: based on Delphi sets.
|
||||||
|
::
|
||||||
|
:: Last changed: $Date$
|
||||||
|
:: Revision: $Rev$
|
||||||
|
:: Author: $Author$
|
||||||
|
}
|
||||||
|
unit X2UtBits;
|
||||||
|
|
||||||
|
interface
|
||||||
|
type
|
||||||
|
TBit = (bit0, bit1, bit2, bit3, bit4, bit5, bit6, bit7,
|
||||||
|
bit8, bit9, bit10, bit11, bit12, bit13, bit14, bit15,
|
||||||
|
bit16, bit17, bit18, bit19, bit20, bit21, bit22, bit23,
|
||||||
|
bit24, bit25, bit26, bit27, bit28, bit29, bit30, bit31,
|
||||||
|
bit32, bit33, bit34, bit35, bit36, bit37, bit38, bit39,
|
||||||
|
bit40, bit41, bit42, bit43, bit44, bit45, bit46, bit47,
|
||||||
|
bit48, bit49, bit50, bit51, bit52, bit53, bit54, bit55,
|
||||||
|
bit56, bit57, bit58, bit59, bit60, bit61, bit62, bit63);
|
||||||
|
|
||||||
|
TBitSize = (bs8, bs16, bs24, bs32, bs64);
|
||||||
|
|
||||||
|
T8Bit = bit0..bit7;
|
||||||
|
T16Bit = bit0..bit15;
|
||||||
|
T24Bit = bit0..bit23;
|
||||||
|
T32Bit = bit0..bit31;
|
||||||
|
T64Bit = bit0..bit63;
|
||||||
|
|
||||||
|
T8Bits = set of T8Bit;
|
||||||
|
T16Bits = set of T16Bit;
|
||||||
|
T24Bits = set of T24Bit;
|
||||||
|
T32Bits = set of T32Bit;
|
||||||
|
T64Bits = set of T64Bit;
|
||||||
|
TMaxBits = set of TBit;
|
||||||
|
|
||||||
|
TByteBits = T8Bits;
|
||||||
|
TWordBits = T16Bits;
|
||||||
|
TIntegerBits = T32Bits;
|
||||||
|
TInt64Bits = T64Bits;
|
||||||
|
|
||||||
|
|
||||||
|
// Unfortunately we can't really overload this (or at least I haven't found
|
||||||
|
// out how without an "Ambiguous overloaded call" error).
|
||||||
|
function BitsToString(const ABits: TMaxBits; const ASize: TBitSize): String;
|
||||||
|
|
||||||
|
function StringToBits(const ABits: String): TMaxBits;
|
||||||
|
|
||||||
|
implementation
|
||||||
|
|
||||||
|
{========================================
|
||||||
|
Bits to String
|
||||||
|
========================================}
|
||||||
|
function BitsToString;
|
||||||
|
var
|
||||||
|
bBit: TBit;
|
||||||
|
bMax: TBit;
|
||||||
|
iLength: Integer;
|
||||||
|
iPos: Integer;
|
||||||
|
|
||||||
|
begin
|
||||||
|
case ASize of
|
||||||
|
bs8:
|
||||||
|
begin
|
||||||
|
bMax := bit7;
|
||||||
|
iLength := 8;
|
||||||
|
end;
|
||||||
|
bs16:
|
||||||
|
begin
|
||||||
|
bMax := bit15;
|
||||||
|
iLength := 16;
|
||||||
|
end;
|
||||||
|
bs24:
|
||||||
|
begin
|
||||||
|
bMax := bit23;
|
||||||
|
iLength := 24;
|
||||||
|
end;
|
||||||
|
bs32:
|
||||||
|
begin
|
||||||
|
bMax := bit31;
|
||||||
|
iLength := 32;
|
||||||
|
end;
|
||||||
|
bs64:
|
||||||
|
begin
|
||||||
|
bMax := bit63;
|
||||||
|
iLength := 64;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
SetLength(Result, iLength);
|
||||||
|
iPos := 1;
|
||||||
|
|
||||||
|
for bBit := bMax downto bit0 do
|
||||||
|
begin
|
||||||
|
if bBit in ABits then
|
||||||
|
Result[iPos] := '1'
|
||||||
|
else
|
||||||
|
Result[iPos] := '0';
|
||||||
|
|
||||||
|
Inc(iPos);
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
{========================================
|
||||||
|
String to Bits
|
||||||
|
========================================}
|
||||||
|
function StringToBits;
|
||||||
|
var
|
||||||
|
bBit: TBit;
|
||||||
|
iPos: Integer;
|
||||||
|
iLength: Integer;
|
||||||
|
|
||||||
|
begin
|
||||||
|
Result := [];
|
||||||
|
bBit := bit0;
|
||||||
|
iLength := Length(ABits);
|
||||||
|
if iLength > 64 then
|
||||||
|
iLength := 64;
|
||||||
|
|
||||||
|
for iPos := iLength downto 1 do
|
||||||
|
begin
|
||||||
|
if ABits[iPos] = '1' then
|
||||||
|
Include(Result, bBit);
|
||||||
|
|
||||||
|
Inc(bBit);
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
end.
|
Loading…
Reference in New Issue
Block a user