ホーム › Globalization › UCharIterator
UCharIterator
構造体サイズ=各フィールドのバイト数(x64/x86 で異なる場合は x64/x86 と併記)。x64/x86 列=フィールドのバイトオフセット(HSPで dupptr / lpoke / wpoke 等に使用)。
フィールド
| フィールド | 型 | サイズ | x64 | x86 | 説明 |
|---|---|---|---|---|---|
| context | void* | 8/4 | +0 | +0 | イテレータが操作する対象データへのポインタ。 |
| length | INT | 4 | +8 | +4 | テキスト全体の長さ。 |
| start | INT | 4 | +12 | +8 | イテレーション範囲の開始位置。 |
| index | INT | 4 | +16 | +12 | 現在のイテレータ位置。 |
| limit | INT | 4 | +20 | +16 | イテレーション範囲の終端位置。 |
| reservedField | INT | 4 | +24 | +20 | ICU内部用の予約フィールド。 |
| getIndex | UCharIteratorGetIndex | 8/4 | +32 | +24 | 現在インデックスを取得する関数ポインタ。 |
| move | UCharIteratorMove | 8/4 | +40 | +28 | 位置を移動する関数ポインタ。 |
| hasNext | UCharIteratorHasNext | 8/4 | +48 | +32 | 次の要素があるか判定する関数ポインタ。 |
| hasPrevious | UCharIteratorHasPrevious | 8/4 | +56 | +36 | 前の要素があるか判定する関数ポインタ。 |
| current | UCharIteratorCurrent | 8/4 | +64 | +40 | 現在のコード単位を取得する関数ポインタ。 |
| next | UCharIteratorNext | 8/4 | +72 | +44 | 次のコード単位を取得し進める関数ポインタ。 |
| previous | UCharIteratorPrevious | 8/4 | +80 | +48 | 前のコード単位を取得し戻る関数ポインタ。 |
| reservedFn | UCharIteratorReserved | 8/4 | +88 | +52 | ICU内部用の予約関数ポインタ。 |
| getState | UCharIteratorGetState | 8/4 | +96 | +56 | イテレータ状態を取得する関数ポインタ。 |
| setState | UCharIteratorSetState | 8/4 | +104 | +60 | イテレータ状態を設定する関数ポインタ。 |
各言語での定義
#include <windows.h>
// UCharIterator (x64 112 / x86 64 バイト)
typedef struct UCharIterator {
void* context;
INT length;
INT start;
INT index;
INT limit;
INT reservedField;
UCharIteratorGetIndex getIndex;
UCharIteratorMove move;
UCharIteratorHasNext hasNext;
UCharIteratorHasPrevious hasPrevious;
UCharIteratorCurrent current;
UCharIteratorNext next;
UCharIteratorPrevious previous;
UCharIteratorReserved reservedFn;
UCharIteratorGetState getState;
UCharIteratorSetState setState;
} UCharIterator;using System;
using System.Runtime.InteropServices;
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct UCharIterator
{
public IntPtr context;
public int length;
public int start;
public int index;
public int limit;
public int reservedField;
public IntPtr getIndex;
public IntPtr move;
public IntPtr hasNext;
public IntPtr hasPrevious;
public IntPtr current;
public IntPtr next;
public IntPtr previous;
public IntPtr reservedFn;
public IntPtr getState;
public IntPtr setState;
}Imports System.Runtime.InteropServices
<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure UCharIterator
Public context As IntPtr
Public length As Integer
Public start As Integer
Public index As Integer
Public limit As Integer
Public reservedField As Integer
Public getIndex As IntPtr
Public move As IntPtr
Public hasNext As IntPtr
Public hasPrevious As IntPtr
Public current As IntPtr
Public next As IntPtr
Public previous As IntPtr
Public reservedFn As IntPtr
Public getState As IntPtr
Public setState As IntPtr
End Structureimport ctypes
from ctypes import wintypes
class UCharIterator(ctypes.Structure):
_fields_ = [
("context", ctypes.c_void_p),
("length", ctypes.c_int),
("start", ctypes.c_int),
("index", ctypes.c_int),
("limit", ctypes.c_int),
("reservedField", ctypes.c_int),
("getIndex", ctypes.c_void_p),
("move", ctypes.c_void_p),
("hasNext", ctypes.c_void_p),
("hasPrevious", ctypes.c_void_p),
("current", ctypes.c_void_p),
("next", ctypes.c_void_p),
("previous", ctypes.c_void_p),
("reservedFn", ctypes.c_void_p),
("getState", ctypes.c_void_p),
("setState", ctypes.c_void_p),
]#[repr(C)]
pub struct UCharIterator {
pub context: *mut core::ffi::c_void,
pub length: i32,
pub start: i32,
pub index: i32,
pub limit: i32,
pub reservedField: i32,
pub getIndex: *mut core::ffi::c_void,
pub move: *mut core::ffi::c_void,
pub hasNext: *mut core::ffi::c_void,
pub hasPrevious: *mut core::ffi::c_void,
pub current: *mut core::ffi::c_void,
pub next: *mut core::ffi::c_void,
pub previous: *mut core::ffi::c_void,
pub reservedFn: *mut core::ffi::c_void,
pub getState: *mut core::ffi::c_void,
pub setState: *mut core::ffi::c_void,
}import "golang.org/x/sys/windows"
type UCharIterator struct {
context uintptr
length int32
start int32
index int32
limit int32
reservedField int32
getIndex uintptr
move uintptr
hasNext uintptr
hasPrevious uintptr
current uintptr
next uintptr
previous uintptr
reservedFn uintptr
getState uintptr
setState uintptr
}type
UCharIterator = record
context: Pointer;
length: Integer;
start: Integer;
index: Integer;
limit: Integer;
reservedField: Integer;
getIndex: Pointer;
move: Pointer;
hasNext: Pointer;
hasPrevious: Pointer;
current: Pointer;
next: Pointer;
previous: Pointer;
reservedFn: Pointer;
getState: Pointer;
setState: Pointer;
end;const UCharIterator = extern struct {
context: ?*anyopaque,
length: i32,
start: i32,
index: i32,
limit: i32,
reservedField: i32,
getIndex: ?*anyopaque,
move: ?*anyopaque,
hasNext: ?*anyopaque,
hasPrevious: ?*anyopaque,
current: ?*anyopaque,
next: ?*anyopaque,
previous: ?*anyopaque,
reservedFn: ?*anyopaque,
getState: ?*anyopaque,
setState: ?*anyopaque,
};type
UCharIterator {.bycopy.} = object
context: pointer
length: int32
start: int32
index: int32
limit: int32
reservedField: int32
getIndex: pointer
move: pointer
hasNext: pointer
hasPrevious: pointer
current: pointer
next: pointer
previous: pointer
reservedFn: pointer
getState: pointer
setState: pointerstruct UCharIterator
{
void* context;
int length;
int start;
int index;
int limit;
int reservedField;
void* getIndex;
void* move;
void* hasNext;
void* hasPrevious;
void* current;
void* next;
void* previous;
void* reservedFn;
void* getState;
void* setState;
}HSP用 定義
HSP3.7/3.8 は構造体機能が無いため4byte整数配列(dim)+peek/poke で操作(32/64bitでサイズ・位置が異なる場合はタブで分割)。IronHSP は NSTRUCT(#defstruct/stdim/->)で32/64bit共通。
; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x86 レイアウト)
; UCharIterator サイズ: 64 バイト(x86)
dim st, 16 ; 4byte整数×16(構造体サイズ 64 / 4 切り上げ)
; context : void* (+0, 4byte) st.0 = 値 / 値 = st.0 (lpoke/lpeek も可)
; length : INT (+4, 4byte) st.1 = 値 / 値 = st.1 (lpoke/lpeek も可)
; start : INT (+8, 4byte) st.2 = 値 / 値 = st.2 (lpoke/lpeek も可)
; index : INT (+12, 4byte) st.3 = 値 / 値 = st.3 (lpoke/lpeek も可)
; limit : INT (+16, 4byte) st.4 = 値 / 値 = st.4 (lpoke/lpeek も可)
; reservedField : INT (+20, 4byte) st.5 = 値 / 値 = st.5 (lpoke/lpeek も可)
; getIndex : UCharIteratorGetIndex (+24, 4byte) st.6 = 値 / 値 = st.6 (lpoke/lpeek も可)
; move : UCharIteratorMove (+28, 4byte) st.7 = 値 / 値 = st.7 (lpoke/lpeek も可)
; hasNext : UCharIteratorHasNext (+32, 4byte) st.8 = 値 / 値 = st.8 (lpoke/lpeek も可)
; hasPrevious : UCharIteratorHasPrevious (+36, 4byte) st.9 = 値 / 値 = st.9 (lpoke/lpeek も可)
; current : UCharIteratorCurrent (+40, 4byte) st.10 = 値 / 値 = st.10 (lpoke/lpeek も可)
; next : UCharIteratorNext (+44, 4byte) st.11 = 値 / 値 = st.11 (lpoke/lpeek も可)
; previous : UCharIteratorPrevious (+48, 4byte) st.12 = 値 / 値 = st.12 (lpoke/lpeek も可)
; reservedFn : UCharIteratorReserved (+52, 4byte) st.13 = 値 / 値 = st.13 (lpoke/lpeek も可)
; getState : UCharIteratorGetState (+56, 4byte) st.14 = 値 / 値 = st.14 (lpoke/lpeek も可)
; setState : UCharIteratorSetState (+60, 4byte) st.15 = 値 / 値 = st.15 (lpoke/lpeek も可)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; UCharIterator サイズ: 112 バイト(x64)
dim st, 28 ; 4byte整数×28(構造体サイズ 112 / 4 切り上げ)
; context : void* (+0, 8byte) qpoke st,0,値 / qpeek(st,0) ※IronHSPのみ。3.7/3.8は lpoke st,0,下位 : lpoke st,4,上位
; length : INT (+8, 4byte) st.2 = 値 / 値 = st.2 (lpoke/lpeek も可)
; start : INT (+12, 4byte) st.3 = 値 / 値 = st.3 (lpoke/lpeek も可)
; index : INT (+16, 4byte) st.4 = 値 / 値 = st.4 (lpoke/lpeek も可)
; limit : INT (+20, 4byte) st.5 = 値 / 値 = st.5 (lpoke/lpeek も可)
; reservedField : INT (+24, 4byte) st.6 = 値 / 値 = st.6 (lpoke/lpeek も可)
; getIndex : UCharIteratorGetIndex (+32, 8byte) qpoke st,32,値 / qpeek(st,32) ※IronHSPのみ。3.7/3.8は lpoke st,32,下位 : lpoke st,36,上位
; move : UCharIteratorMove (+40, 8byte) qpoke st,40,値 / qpeek(st,40) ※IronHSPのみ。3.7/3.8は lpoke st,40,下位 : lpoke st,44,上位
; hasNext : UCharIteratorHasNext (+48, 8byte) qpoke st,48,値 / qpeek(st,48) ※IronHSPのみ。3.7/3.8は lpoke st,48,下位 : lpoke st,52,上位
; hasPrevious : UCharIteratorHasPrevious (+56, 8byte) qpoke st,56,値 / qpeek(st,56) ※IronHSPのみ。3.7/3.8は lpoke st,56,下位 : lpoke st,60,上位
; current : UCharIteratorCurrent (+64, 8byte) qpoke st,64,値 / qpeek(st,64) ※IronHSPのみ。3.7/3.8は lpoke st,64,下位 : lpoke st,68,上位
; next : UCharIteratorNext (+72, 8byte) qpoke st,72,値 / qpeek(st,72) ※IronHSPのみ。3.7/3.8は lpoke st,72,下位 : lpoke st,76,上位
; previous : UCharIteratorPrevious (+80, 8byte) qpoke st,80,値 / qpeek(st,80) ※IronHSPのみ。3.7/3.8は lpoke st,80,下位 : lpoke st,84,上位
; reservedFn : UCharIteratorReserved (+88, 8byte) qpoke st,88,値 / qpeek(st,88) ※IronHSPのみ。3.7/3.8は lpoke st,88,下位 : lpoke st,92,上位
; getState : UCharIteratorGetState (+96, 8byte) qpoke st,96,値 / qpeek(st,96) ※IronHSPのみ。3.7/3.8は lpoke st,96,下位 : lpoke st,100,上位
; setState : UCharIteratorSetState (+104, 8byte) qpoke st,104,値 / qpeek(st,104) ※IronHSPのみ。3.7/3.8は lpoke st,104,下位 : lpoke st,108,上位
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
#defstruct global UCharIterator
#field intptr context
#field int length
#field int start
#field int index
#field int limit
#field int reservedField
#field intptr getIndex
#field intptr move
#field intptr hasNext
#field intptr hasPrevious
#field intptr current
#field intptr next
#field intptr previous
#field intptr reservedFn
#field intptr getState
#field intptr setState
#endstruct
stdim st, UCharIterator ; NSTRUCT 変数を確保
st->length = 100
mes "length=" + st->length