unit YofUtils;
-{
- HttpApp \82Ì\83N\83\8d\81[\83\93\82â\82»\82Ì\91¼\8eG\97p\8aÖ\90\94
+{!
+\file YofUtils.pas
+\brief HttpApp \82Ì\83N\83\8d\81[\83\93\82â\82»\82Ì\91¼\8eG\97p\8aÖ\90\94
+
+$Id: YofUtils.pas,v 1.10 2004/10/09 15:06:19 yoffy Exp $
}
interface
Classes, SysUtils,
Windows;
+{!
+\brief ExtractHttpFields \82Ì\83N\83\8d\81[\83\93
+\warning \82Æ\82è\82 \82¦\82¸\82Ì\91ã\97p\95i\82È\82Ì\82Å chrWhite \82ð\8dl\97¶\82µ\82Ä\82¢\82È\82¢\82±\82Æ\82É\92\8d\88Ó\81I\81I\81I
+}
procedure ExtractHttpFields(
const chrSep : TSysCharSet;
const chrWhite : TSysCharSet;
const strValue : string
) : string;
+{!
+\brief MachiesMask \82Ì\83N\83\8d\81[\83\93
+\warning \82Æ\82è\82 \82¦\82¸\82Ì\91ã\97p\95i\82È\82Ì\82Å [] \82ð\8eg\82Á\82½\90³\8bK\95\\8c»\82ð\8dl\97¶\82µ\82Ä\82¢\82È\82¢\82±\82Æ\82É\92\8d\88Ó\81I\81I\81I
+}
function MatchesMask(
const filename, mask : string
) : boolean;
-/// \83\81\83^\83L\83\83\83\89\83N\83^\82ð\90³\8bK\95\\8c»\88µ\82¢\82É\82È\82ç\82È\82¢\82æ\82¤\82É\92u\8a·
+//! \83\81\83^\83L\83\83\83\89\83N\83^\82ð\90³\8bK\95\\8c»\88µ\82¢\82É\82È\82ç\82È\82¢\82æ\82¤\82É\92u\8a·
function RegExpEncode(
const text : string
) : string;
-{*!
+{!
\brief \95\\8e¦\83\81\83b\83Z\81[\83W\82Ì\90®\8c`
\param msg \95\\8e¦\82·\82é\83\81\83b\83Z\81[\83W
\param elements \92u\8a·\92P\8cê
<pre><code>
elements := IntToStr( 10 ) + #10 + 'hoge';
-m := YofUtils.FormatMessage(
+m := MessageStyle(
'^0 \8cÂ\82Ì\81g^1\81h\82ð\92u\8a·\82µ\82Ü\82µ\82½\81B',
elements );
</code></pre>
\82Å\8fo\97Í\82³\82ê\82é m \82Í\81u10 \8cÂ\82Ì\81ghoge\81h\82ð\92u\8a·\82µ\82Ü\82µ\82½\81B\81v\82Æ\82È\82è\82Ü\82·\81B
-*}
-function FormatMessage(
+}
+function MessageStyle(
const msg : string;
const elements : string
) : string; overload;
-function FormatMessage(
+function MessageStyle(
const msg : string;
const elements : TStringList
) : string; overload;
+{!
+\brief \89E\89ñ\93]\83V\83t\83g
+\param v \89ñ\93]\82·\82é\92l
+\param n \89ñ\93]\83r\83b\83g\90\94
+\return Longword( (v shl (32 - n)) or (v shr n) ) \82Ì\92l
+}
+function ror( v, n : Longword ) : Longword; register;
+
+{!
+\brief \95¶\8e\9a\97ñ\82Ì\83n\83b\83V\83\85\92l\82ð\8cv\8eZ
+\param s \95¶\8e\9a\97ñ
+\return \83n\83b\83V\83\85\92l ( 4 byte )
+\warning \91½\83o\83C\83g\82ð 4 byte \82É\8fk\82ß\82Ä\82¢\82é\82½\82ß\81A
+ \93¯\82¶\92l\82ð\8fo\97Í\82·\82é\95¶\8e\9a\97ñ\82Í\96³\8cÀ\82É\91¶\8dÝ\82µ\82Ü\82·\81B
+ \83R\83\93\83t\83\8a\83N\83g\82ª\8bN\82±\82ç\82È\82¢\8e\96\82ð\91O\92ñ\82É\82µ\82½\8bL\8fq\82Í\94ð\82¯\82Ä\82\82¾\82³\82¢\81B
+
+\82±\82Ì\8aÖ\90\94\82Í\91½\83o\83C\83g\92·\82Ì\95¶\8e\9a\97ñ\82ð 4 byte \82É\8fk\82ß\82Ü\82·\81B<br>
+\82»\82Ì\89ß\92ö\82Å\81A'abcdefgh' \82Æ 'efghabcd' \82ª\93¯\82¶\92l\82É\82È\82ç\82È\82¢\82æ\82¤\82É\82·\82é\93\99\81A
+\91½\8f\95Î\82è\82ð\8fÈ\82\82æ\82¤\82É\8dl\97¶\82³\82ê\82Ü\82·\81B
+}
+function GetStringHash( const s : string ) : Longword;
+
type
- /// Mode \92l\82ª\82¨\82©\82µ\82¢
+ //! Mode \92l\82ª\82¨\82©\82µ\82¢
EMappedFileModeError = class( Exception );
- /// \83}\83b\83s\83\93\83O\82É\8e¸\94s
+ //! \83}\83b\83s\83\93\83O\82É\8e¸\94s
EMappedFileMappingError = class( Exception );
- /// \83\81\83\82\83\8a\83}\83b\83v\83h\81E\83t\83@\83C\83\8b \83N\83\89\83X
+ //! \83\81\83\82\83\8a\83}\83b\83v\83h\81E\83t\83@\83C\83\8b \83N\83\89\83X
TMappedFile = class( TObject )
private
FFileHandle : THandle;
FMappingHandle : THandle;
- FSize : Longword;
+ FSize : Int64;
FViewAddress : Pointer;
public
- constructor Create( const filePath : string; mode : Longword = fmOpenRead );
+ {!
+ \brief \83\81\83\82\83\8a\83}\83b\83v\83h\83t\83@\83C\83\8b\82Ì\8dì\90¬
+ \param filePath \8aJ\82\83t\83@\83C\83\8b\82Ì\83p\83X
+ \param mode fmOpenRead (\83f\83t\83H\83\8b\83g) \82Ü\82½\82Í fmOpenReadWrite
+ \param maximumSize \83y\81[\83W\83T\83C\83Y\82Ì\8fã\8cÀ (0 \82È\82ç\8c»\8dÝ\82Ì\83t\83@\83C\83\8b\83T\83C\83Y)
+ }
+ constructor Create(
+ const filePath : string;
+ mode : Longword = fmOpenRead;
+ maximumSize : Int64 = 0 );
destructor Destroy; override;
- /// \83T\83C\83Y\82Ì\8eæ\93¾
- property Size : Longword read FSize;
- /// \83A\83h\83\8c\83X\82Ì\8eæ\93¾
+ //! \83T\83C\83Y\82Ì\8eæ\93¾
+ property Size : Int64 read FSize;
+ //! \83A\83h\83\8c\83X\82Ì\8eæ\93¾
property Memory : Pointer read FViewAddress;
end;
uses MojuUtils;
-// \82Æ\82è\82 \82¦\82¸\82Ì\91ã\97p\95i\82È\82Ì\82Å chrWhite \82ð\8dl\97¶\82µ\82Ä\82¢\82È\82¢\82±\82Æ\82É\92\8d\88Ó\81I\81I\81I
procedure ExtractHttpFields(
const chrSep : TSysCharSet;
const chrWhite : TSysCharSet;
end;
-// \82Æ\82è\82 \82¦\82¸\82Ì\91ã\97p\95i\82È\82Ì\82Å [] \82ð\8eg\82Á\82½\90³\8bK\95\\8c»\82ð\8dl\97¶\82µ\82Ä\82¢\82È\82¢\82±\82Æ\82É\92\8d\88Ó\81I\81I\81I
function MatchesMask(
const filename, mask : string
) : boolean;
end;
-
-// \83\81\83^\83L\83\83\83\89\83N\83^\82ð\90³\8bK\95\\8c»\88µ\82¢\82É\82È\82ç\82È\82¢\82æ\82¤\82É\92u\8a·
function RegExpEncode(
const text : string
) : string;
end;
-function FormatMessage(
+function MessageStyle(
const msg : string;
const elements : string
) : string;
list := TStringList.Create;
try
list.Text := elements;
- Result := YofUtils.FormatMessage( msg, list );
+ Result := MessageStyle( msg, list );
finally
list.Free;
end;
end;
-function FormatMessage(
+function MessageStyle(
const msg : string;
const elements : TStringList
) : string;
end;
+//==============================
+// ror
+//==============================
+function ror( v, n : Longword ) : Longword; register;
+asm
+ mov cl, dl
+ ror eax, cl
+end;
+
+//==============================
+// GetStringHash
+//==============================
+function GetStringHash( const s : string ) : Longword;
+var
+ l : Integer;
+ v : Longword;
+ p, tail : PChar;
+begin
+
+ l := Length( s );
+ p := PChar( s );
+ v := $87654321;
+ tail := p + (l and $fffffffc);
+ while p < tail do begin
+ v := PDword( p )^ + (v shl 2) * ($10000 - v);
+ p := p + 4;
+ end;
+ tail := PChar( s ) + l;
+ while p < tail do begin
+ v := PByte( p )^ + (v shl 2) * ($10000 - v);
+ Inc( p );
+ end;
+
+ Result := v xor ((v shl 2) * ($10000 - v));
+
+end;
+
{ TMappedFile }
-{*!
-\brief \83\81\83\82\83\8a\83}\83b\83v\83h\83t\83@\83C\83\8b\82Ì\8dì\90¬
-\param filePath \8aJ\82\83t\83@\83C\83\8b\82Ì\83p\83X
-\param mode fmOpenRead (\83f\83t\83H\83\8b\83g) \82Ü\82½\82Í fmOpenReadWrite
-*}
-constructor TMappedFile.Create( const filePath : string; mode : Longword = fmOpenRead );
+constructor TMappedFile.Create(
+ const filePath : string;
+ mode : Longword = fmOpenRead;
+ maximumSize : Int64 = 0 );
var
dwFileDesiredAccess : DWORD;
flProtect : DWORD;
end;
FFileHandle := CreateFile(
- PChar( filePath ), dwFileDesiredAccess, 0, nil, OPEN_EXISTING,
+ PChar( filePath ), dwFileDesiredAccess, 0, nil, OPEN_ALWAYS,
FILE_ATTRIBUTE_NORMAL, 0 );
if FFileHandle = INVALID_HANDLE_VALUE then
raise EFOpenError.Create( '\83t\83@\83C\83\8b\82Ì\83I\81[\83v\83\93\82É\8e¸\94s\82µ\82Ü\82µ\82½\81B' );
FSize := GetFileSize( FFileHandle, nil );
+ if FSize < maximumSize then
+ FSize := maximumSize;
FMappingHandle := CreateFileMapping(
- FFileHandle, nil, flProtect, 0, 0, nil );
+ FFileHandle, nil, flProtect,
+ DWORD( (maximumSize shr 32) and $ffffffff ),
+ DWORD( maximumSize and $ffffffff ),
+ nil );
if FFileHandle = INVALID_HANDLE_VALUE then
raise EMappedFileMappingError.Create( '\83t\83@\83C\83\8b\82Ì\83}\83b\83s\83\93\83O\82É\8e¸\94s\82µ\82Ü\82µ\82½\81B' );