type
TCell = class
public
info: TReki;
next, previous: TCell;
end;
TList = TCell;
TPosition = TCell;
Cell cell
, а в Паскале cell : Cell
нельзя, он регистронезависимый. Общепринято, что тип начинается на T, указатель — на P. Иногда добавляют другие префиксы (event — Ev, dynamic array —Da), но типы без префикса — плохой тон. enum {
DOUBLE_MANTISSA_BITS = 52,
DOUBLE_MIN_EXPONENT = -1022,
DOUBLE_EXPONENT_BIAS = 1023,
};
#define UC8x(X,Y,Z,T) (static_cast<uint64_t>(0x##X##Y##Z##T##ULL))
#define DOUBLE_MANTISSA_MASK UC8x(000f, ffff, ffff, ffff)
#define DOUBLE_EXPONENT_MASK UC8x(7ff0, 0000, 0000, 0000)
#define DOUBLE_EXPONENT_MASK_HI UC4x(7ff0, 0000)
#define DOUBLE_IMPLICIT_BIT (DOUBLE_MANTISSA_MASK + 1)
union DoubleInt {
double asDouble;
uint64_t asInt;
struct {
uint32_t lo, hi;
} asIntel;
....
}
int DoubleInt::exponent() const
{
return static_cast<int>((
static_cast<int64_t>(asInt & DOUBLE_EXPONENT_MASK) >>
(DOUBLE_MANTISSA_BITS)) - DOUBLE_EXPONENT_BIAS);
}
uint64_t DoubleInt::unsafeMantissa() const
{
int ex = exponent();
uint64_t bits = asInt & DOUBLE_MANTISSA_MASK;
return (ex == DOUBLE_MIN_EXPONENT - 1)
? bits << 1
: bits | DOUBLE_IMPLICIT_BIT;
}
bool DoubleInt::isPreciseInteger() const
{
// функцию isFinite() намеренно упустил, ибо она есть «в коробке» Delphi.
// А вот в Си++ есть не во всех реализациях…
return isFinite()
&& (asDouble == 0.0 ||
DOUBLE_MANTISSA_BITS - numberOfTrailingZeros(unsafeMantissa()) <= exponent());
}
int math::numberOfTrailingZeros(uint64_t i)
{
uint32_t x, y;
if (i == 0u) return 64;
int n = 63;
y = static_cast<uint32_t>(i);
if (y != 0) { n = n -32; x = y; } else x = (int)(i >> 32);
y = x << 16; if (y != 0) { n = n -16; x = y; }
y = x << 8; if (y != 0) { n = n - 8; x = y; }
y = x << 4; if (y != 0) { n = n - 4; x = y; }
y = x << 2; if (y != 0) { n = n - 2; x = y; }
return n - ((x << 1) >> 31);
}
bool math::isPreciseInteger(double x)
{
DoubleInt di;
di.asDouble = x;
return di.isPreciseInteger();
}
procedure TMyThread.SyncCreateMemo;
begin
Memo:=TMemo.Create(Form6);
Memo.Parent:=Form6;
Memo.Left:=50;
Memo.Top:=50;
Memo.Width:=250;
Memo.Height:=100;
Memo.Text:='Мама я родился!';
end;
procedure TMyThread.Execute;
begin
Synchronize(SyncCreateMemo);
end;
procedure TForm6.WmCreateMemo; // message WM_CREATEMEMO = WM_USER + 1
begin
Memo:=TMemo.Create(Form6);
Memo.Parent:=Self;
Memo.Left:=50;
Memo.Top:=50;
Memo.Width:=250;
Memo.Height:=100;
Memo.Text:='Мама я родился!';
end;
procedure TMyThread.Execute;
begin
PostMessage(Form6.Handle, WM_CREATEMEMO, 0, 0);
end;
std::vector<char>
. Что вместо SetLength — читай доку.Я изменял в Unit1.pas - type TPanel на sPanel и в Unit1.dfm TPanel на sPanel.
Но при открытии пишет, что класс sPanel не найден, хотя в uses прописано sPanel.
function StrToDate ( const Date : string; const FormatSettings : TFormatSettings ) : TDateTime;
function TryStrToDate(const S: string; out Value: TDateTime; const AFormatSettings: TFormatSettings): Boolean;
New(Psh[4, 1]);
Psh[4][1] = new short[393];
Psh[3][0] = new short[392];
(для примера работаю со вторым)function OpenA(FileName: ShortString; Mode: LongWord): integer;
Stream OpenA(string FileName, FileAccess access);
if (!ReadA(Df[3][0], Psh[3][0], 392) {
CloseA(Df[3, 0]);
Psh[3][0] = null;
return;
}
Pkts[4, 1]:= @Psh[4, 1]^[9];
Pkts[3][0].array = Psh[3][0];
Pkts[3][0].offset = 8;
someObj.UserData := TObject(true);
someBool := boolean(someObj.UserData);
someObj.UserData := dummyObject;
someBool := (someObj.UserData <> nil);
initialization
dummyObject := TObject.Create;
finalization
dummyObject.Free;
end.
TBoolObject = class
public
Value : boolean;
// конструкторы опущу, деструктор не нужен
end.
someObj.UserData := TBoolObject(true);
someBool := (someObj.UserData as TBoolObject).Value;
TObjBool = record
case integer of
0 : ( asObj : TObject );
1 : ( asBool : boolean );
end;