本文整理汇总了C++中IsNull函数的典型用法代码示例。如果您正苦于以下问题:C++ IsNull函数的具体用法?C++ IsNull怎么用?C++ IsNull使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了IsNull函数的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: GetOtherTime
Time Value::GetOtherTime() const
{
if(IsNull()) return Null;
return ToTime(GetSmall<Date>());
}
示例2: Format
Value ConvertDouble::Format(const Value& q) const
{
if(IsNull(q))
return Null;
return UPP::NFormat(pattern, (double)q);
}
示例3: GetSize
void LabelBox::Paint(Draw& w)
{
Size sz = GetSize();
if(!IsTransparent())
w.DrawRect(sz, SColorFace);
Size lsz = GetLabelSize();
int d = lsz.cy >> 1;
bool hline = sz.cy < 2 * Draw::GetStdFontCy();
bool vline = sz.cx < 2 * Draw::GetStdFontCy();
int ty = hline ? (sz.cy - lsz.cy) / 2 : 0;
Size ts = PaintLabel(w, d + 2, ty, sz.cx, lsz.cy, !IsShowEnabled(), false, false, VisibleAccessKeys());
w.Begin();
w.ExcludeClip(d, ty, ts.cx + 4, ts.cy);
if(GUI_GlobalStyle() >= GUISTYLE_XP || !IsNull(color)) {
if(hline) {
d = sz.cy / 2;
w.DrawRect(0, d - 1, sz.cx, 1, SColorLight);
w.DrawRect(0, d, sz.cx, 1, SColorShadow);
w.DrawRect(0, d + 1, sz.cx, 1, SColorLight);
}
else
if(vline) {
d = sz.cx / 2;
w.DrawRect(d - 1, 0, 1, sz.cy, SColorLight);
w.DrawRect(d, 0, 1, sz.cy, SColorShadow);
w.DrawRect(d + 1, 0, 1, sz.cy, SColorLight);
}
else {
Color c = Nvl(color, LabelBoxColor);
w.DrawRect(0, d + 2, 1, sz.cy - d - 4, c);
w.DrawRect(sz.cx - 1, d + 2, 1, sz.cy - d - 4, c);
w.DrawRect(2, sz.cy - 1, sz.cx - 4, 1, c);
w.DrawRect(2, d, sz.cx - 4, 1, c);
w.DrawRect(1, d + 1, 2, 1, c);
w.DrawRect(1, d + 2, 1, 1, c);
w.DrawRect(sz.cx - 3, d + 1, 2, 1, c);
w.DrawRect(sz.cx - 2, d + 2, 1, 1, c);
w.DrawRect(1, sz.cy - 2, 2, 1, c);
w.DrawRect(1, sz.cy - 3, 1, 1, c);
w.DrawRect(sz.cx - 3, sz.cy - 2, 2, 1, c);
w.DrawRect(sz.cx - 2, sz.cy - 3, 1, 1, c);
}
}
else {
if(hline) {
d = sz.cy / 2;
w.DrawRect(0, d, sz.cx, 1, SColorShadow);
w.DrawRect(0, d + 1, sz.cx, 1, SColorLight);
}
else
if(vline) {
d = sz.cx / 2;
w.DrawRect(d, 0, 1, sz.cy, SColorShadow);
w.DrawRect(d - 1, 1, 0, sz.cy, SColorLight);
}
else {
w.DrawRect(1, d, sz.cx - 2, 1, SColorShadow);
w.DrawRect(1, d + 1, sz.cx - 2, 1, SColorLight);
w.DrawRect(0, d, 1, sz.cy - d - 1, SColorShadow);
w.DrawRect(1, d + 1, 1, sz.cy - d - 2, SColorLight);
w.DrawRect(sz.cx - 2, d, 1, sz.cy - d, SColorShadow);
w.DrawRect(sz.cx - 1, d, 1, sz.cy - d, SColorLight);
w.DrawRect(1, sz.cy - 2, sz.cx - 2, 1, SColorShadow);
w.DrawRect(1, sz.cy - 1, sz.cx - 2, 1, SColorLight);
}
}
w.End();
}
示例4: DisplayBootOptions
/**
Worker function that displays the list of boot options that is passed in.
The function loops over the entries of the list of boot options that is passed
in. For each entry, the boot option description is displayed on a single line
along with the position of the option in the list. In debug mode, the UEFI
device path and the arguments of the boot option are displayed as well in
subsequent lines.
@param[in] BootOptionsList List of the boot options
**/
STATIC
VOID
DisplayBootOptions (
IN LIST_ENTRY* BootOptionsList
)
{
EFI_STATUS Status;
UINTN BootOptionCount;
LIST_ENTRY *Entry;
BDS_LOAD_OPTION *BdsLoadOption;
BOOLEAN IsUnicode;
BootOptionCount = 0 ;
for (Entry = GetFirstNode (BootOptionsList);
!IsNull (BootOptionsList, Entry);
Entry = GetNextNode (BootOptionsList, Entry)
) {
BdsLoadOption = LOAD_OPTION_FROM_LINK (Entry);
Print (L"[%d] %s\n", ++BootOptionCount, BdsLoadOption->Description);
DEBUG_CODE_BEGIN ();
CHAR16* DevicePathTxt;
EFI_DEVICE_PATH_TO_TEXT_PROTOCOL* DevicePathToTextProtocol;
ARM_BDS_LOADER_TYPE LoaderType;
ARM_BDS_LOADER_OPTIONAL_DATA* OptionalData;
Status = gBS->LocateProtocol (
&gEfiDevicePathToTextProtocolGuid,
NULL,
(VOID **)&DevicePathToTextProtocol
);
ASSERT_EFI_ERROR (Status);
DevicePathTxt = DevicePathToTextProtocol->ConvertDevicePathToText (
BdsLoadOption->FilePathList,
TRUE,
TRUE
);
Print (L"\t- %s\n", DevicePathTxt);
OptionalData = BdsLoadOption->OptionalData;
if (IS_ARM_BDS_BOOTENTRY (BdsLoadOption)) {
LoaderType = (ARM_BDS_LOADER_TYPE)ReadUnaligned32 ((CONST UINT32*)&OptionalData->Header.LoaderType);
if ((LoaderType == BDS_LOADER_KERNEL_LINUX_ATAG) ||
(LoaderType == BDS_LOADER_KERNEL_LINUX_FDT ) ) {
Print (L"\t- Arguments: %a\n", &OptionalData->Arguments.LinuxArguments + 1);
}
} else if (OptionalData != NULL) {
if (IsPrintableString (OptionalData, &IsUnicode)) {
if (IsUnicode) {
Print (L"\t- Arguments: %s\n", OptionalData);
} else {
AsciiPrint ("\t- Arguments: %a\n", OptionalData);
}
}
}
FreePool (DevicePathTxt);
DEBUG_CODE_END ();
}
}
示例5: GetNumbering
dword ParaFormatting::Get(RichText::FormatInfo& formatinfo)
{
dword v = 0;
if(!IsNull(before)) {
formatinfo.before = ~before;
v |= RichText::BEFORE;
}
if(!IsNull(lm)) {
formatinfo.lm = ~lm;
v |= RichText::LM;
}
if(!IsNull(indent)) {
formatinfo.indent = ~indent;
v |= RichText::INDENT;
}
if(!IsNull(rm)) {
formatinfo.rm = ~rm;
v |= RichText::RM;
}
if(!IsNull(after)) {
formatinfo.after = ~after;
v |= RichText::AFTER;
}
if(!IsNull(align)) {
static int sw[] = { ALIGN_LEFT, ALIGN_CENTER, ALIGN_RIGHT, ALIGN_JUSTIFY };
formatinfo.align = sw[(int)~align];
v |= RichText::ALIGN;
}
if(!IsNull(page)) {
formatinfo.newpage = page;
v |= RichText::NEWPAGE;
}
if(!IsNull(keep)) {
formatinfo.keep = keep;
v |= RichText::KEEP;
}
if(!IsNull(keepnext)) {
formatinfo.keepnext = keepnext;
v |= RichText::KEEPNEXT;
}
if(!IsNull(orphan)) {
formatinfo.orphan = orphan;
v |= RichText::ORPHAN;
}
if(!IsNull(bullet)) {
formatinfo.bullet = ~bullet;
v |= RichText::BULLET;
}
if(!IsNull(linespacing)) {
formatinfo.linespacing = ~linespacing;
v |= RichText::SPACING;
}
if(IsNumbering()) {
(RichPara::NumberFormat&)formatinfo = GetNumbering();
v |= RichText::NUMBERING;
}
if((RichText::TABS & formatinfo.paravalid) || tabs.GetCount()) {
formatinfo.tab.Clear();
for(int i = 0; i < tabs.GetCount(); i++) {
RichPara::Tab tab;
tab.pos = tabs.Get(i, 0);
tab.align = (int)tabs.Get(i, 1);
tab.fillchar = (int)tabs.Get(i, 2);
formatinfo.tab.Add(tab);
}
v |= RichText::TABS;
}
if(!IsNull(tabsize)) {
formatinfo.tabsize = ~tabsize;
v |= RichText::TABSIZE;
}
if(!IsNull(ruler)) {
formatinfo.ruler = ~ruler;
v |= RichText::RULER;
}
if(!IsNull(rulerink)) {
formatinfo.rulerink = ~rulerink;
v |= RichText::RULERINK;
}
if(!IsNull(rulerstyle)) {
formatinfo.rulerstyle = ~rulerstyle;
v |= RichText::RULERSTYLE;
}
return v;
}
示例6: return
wxGraphicsRenderer* wxGraphicsObject::GetRenderer() const
{
return ( IsNull() ? NULL : GetGraphicsData()->GetRenderer() );
}
示例7: SelectBootOption
/**
Worker function that asks for a boot option to be selected and returns a
pointer to the structure describing the selected boot option.
@param[in] BootOptionsList List of the boot options
@retval EFI_SUCCESS Selection succeeded
@retval !EFI_SUCCESS Input error or input cancelled
**/
STATIC
EFI_STATUS
SelectBootOption (
IN LIST_ENTRY* BootOptionsList,
IN CONST CHAR16* InputStatement,
OUT BDS_LOAD_OPTION_ENTRY** BdsLoadOptionEntry
)
{
EFI_STATUS Status;
UINTN BootOptionCount;
UINT16 *BootOrder;
LIST_ENTRY* Entry;
UINTN BootOptionSelected;
UINTN Index;
// Get the number of boot options
Status = GetGlobalEnvironmentVariable (
L"BootOrder", NULL, &BootOptionCount, (VOID**)&BootOrder
);
if (EFI_ERROR (Status)) {
goto ErrorExit;
}
FreePool (BootOrder);
BootOptionCount /= sizeof (UINT16);
// Check if a valid boot option(s) is found
if (BootOptionCount == 0) {
if (StrCmp (InputStatement, DELETE_BOOT_ENTRY) == 0) {
Print (L"Nothing to remove!\n");
} else if (StrCmp (InputStatement, UPDATE_BOOT_ENTRY) == 0) {
Print (L"Nothing to update!\n");
} else if (StrCmp (InputStatement, MOVE_BOOT_ENTRY) == 0) {
Print (L"Nothing to move!\n");
} else {
Print (L"No supported Boot Entry.\n");
}
return EFI_NOT_FOUND;
}
// Get the index of the boot device to delete
BootOptionSelected = 0;
while (BootOptionSelected == 0) {
Print (InputStatement);
Status = GetHIInputInteger (&BootOptionSelected);
if (EFI_ERROR (Status)) {
Print (L"\n");
goto ErrorExit;
} else if ((BootOptionSelected == 0) || (BootOptionSelected > BootOptionCount)) {
Print (L"Invalid input (max %d)\n", BootOptionCount);
BootOptionSelected = 0;
}
}
// Get the structure of the Boot device to delete
Index = 1;
for (Entry = GetFirstNode (BootOptionsList);
!IsNull (BootOptionsList, Entry);
Entry = GetNextNode (BootOptionsList,Entry)
)
{
if (Index == BootOptionSelected) {
*BdsLoadOptionEntry = LOAD_OPTION_ENTRY_FROM_LINK (Entry);
break;
}
Index++;
}
ErrorExit:
return Status;
}
示例8: query
/**
function to take a list of files to copy and a destination location and do
the verification and copying of those files to that location. This function
will report any errors to the user and halt.
The key is to have this function called ONLY once. this allows for the parameter
verification to happen correctly.
@param[in] FileList A LIST_ENTRY* based list of files to move.
@param[in] DestDir The destination location.
@param[in] SilentMode TRUE to eliminate screen output.
@param[in] RecursiveMode TRUE to copy directories.
@param[in] Resp The response to the overwrite query (if always).
@retval SHELL_SUCCESS the files were all moved.
@retval SHELL_INVALID_PARAMETER a parameter was invalid
@retval SHELL_SECURITY_VIOLATION a security violation ocurred
@retval SHELL_WRITE_PROTECTED the destination was write protected
@retval SHELL_OUT_OF_RESOURCES a memory allocation failed
**/
SHELL_STATUS
ValidateAndCopyFiles(
IN CONST EFI_SHELL_FILE_INFO *FileList,
IN CONST CHAR16 *DestDir,
IN BOOLEAN SilentMode,
IN BOOLEAN RecursiveMode,
IN VOID **Resp
)
{
CHAR16 *HiiOutput;
CHAR16 *HiiResultOk;
CONST EFI_SHELL_FILE_INFO *Node;
SHELL_STATUS ShellStatus;
EFI_STATUS Status;
CHAR16 *DestPath;
VOID *Response;
UINTN PathSize;
CONST CHAR16 *Cwd;
UINTN NewSize;
CHAR16 *CleanFilePathStr;
if (Resp == NULL) {
Response = NULL;
} else {
Response = *Resp;
}
DestPath = NULL;
ShellStatus = SHELL_SUCCESS;
PathSize = 0;
Cwd = ShellGetCurrentDir(NULL);
CleanFilePathStr = NULL;
ASSERT(FileList != NULL);
ASSERT(DestDir != NULL);
Status = ShellLevel2StripQuotes (DestDir, &CleanFilePathStr);
if (EFI_ERROR (Status)) {
if (Status == EFI_OUT_OF_RESOURCES) {
return SHELL_OUT_OF_RESOURCES;
} else {
return SHELL_INVALID_PARAMETER;
}
}
ASSERT (CleanFilePathStr != NULL);
//
// If we are trying to copy multiple files... make sure we got a directory for the target...
//
if (EFI_ERROR(ShellIsDirectory(CleanFilePathStr)) && FileList->Link.ForwardLink != FileList->Link.BackLink) {
//
// Error for destination not a directory
//
ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_NOT_DIR), gShellLevel2HiiHandle, L"cp", CleanFilePathStr);
FreePool (CleanFilePathStr);
return (SHELL_INVALID_PARAMETER);
}
for (Node = (EFI_SHELL_FILE_INFO *)GetFirstNode(&FileList->Link)
; !IsNull(&FileList->Link, &Node->Link)
; Node = (EFI_SHELL_FILE_INFO *)GetNextNode(&FileList->Link, &Node->Link)
){
//
// skip the directory traversing stuff...
//
if (StrCmp(Node->FileName, L".") == 0 || StrCmp(Node->FileName, L"..") == 0) {
continue;
}
NewSize = StrSize(CleanFilePathStr);
NewSize += StrSize(Node->FullName);
NewSize += (Cwd == NULL)? 0 : (StrSize(Cwd) + sizeof(CHAR16));
if (NewSize > PathSize) {
PathSize = NewSize;
}
//
// Make sure got -r if required
//
//.........这里部分代码省略.........
示例9: AsJSON
String AsJSON(Time tm)
{
return IsNull(tm) ? "null" : "\"\\/Date(" + AsString(1000 * (tm - Time(1970, 1, 1))) + ")\\/\"";
}
示例10: chr
bool Paragraph::Format(ParaTypo& pfmt, int cx, int zoom) const {
int len = length + !!style.indent;
Buffer<char> chr(len);
Buffer<int> width(len);
Buffer<ParaTypo::Part *> info(len);
Buffer<ParaTypo::Part> pinfo(part.GetCount() + !!style.indent);
const Part *pptr = part.Begin();
const Part *plim = part.End();
ParaTypo::Part *pp = pinfo;
char *cp = chr;
int *wp = width;
ParaTypo::Part **ip = info;
if(!IsNull(parafont)) {
Font pf = parafont;
// pf.Height(max(1, DocZoom(zoom, parafont.GetHeight())));
int n = DocZoom(zoom, parafont.GetHeight());
pf.Height(n ? n : 1);
FontInfo f = pf.Info();
pfmt.SetMin(f.GetAscent(), f.GetDescent(), f.GetExternal());
}
/* if(!IsNull(parafont)) {
FontInfo f = w.GetFontInfo(parafont);
pfmt.SetMin(DocZoom(zoom, f.GetAscent()),
DocZoom(zoom, f.GetDescent()),
DocZoom(zoom, f.GetExternal()));
}
*/ if(style.indent) {
static Part dummy;
*cp++ = ' ';
*wp++ = DocZoom(zoom, style.indent);
pp->Set(Arial(0), Black);
pp->voidptr = &dummy;
*ip++ = pp;
pp++;
}
while(pptr != plim) {
if(pptr->pr) {
*cp++ = '@';
Size sz = pptr->pr.GetStdSize();
*wp++ = pp->width = pptr->pr && !pptr->sz.cx ? sz.cx : DocZoom(zoom, pptr->sz.cx);
*ip++ = pp;
pp->ascent = minmax(pptr->pr && !pptr->sz.cy ? sz.cy : DocZoom(zoom, pptr->sz.cy), 0, 1000);
pp->descent = 0;
pp->external = pp->overhang = 0;
pp->color = pptr->color;
}
else {
Font font = pptr->font;
font.Height(DocZoom(zoom, pptr->font.GetHeight()));
FontInfo pf = pp->Set(font, pptr->color);
const char *s = pptr->text;
int n = pptr->text.GetLength();
while(n--) {
*cp++ = *s;
*wp++ = pf[*s == 31 ? 32 : ToUnicode((byte) *s, CHARSET_DEFAULT)];
*ip++ = pp;
s++;
}
}
pp->voidptr = (void *)pptr;
pp++;
pptr++;
}
return pfmt.Format(style.align, len, chr, width, info, cx);
}
示例11: WString
Value::operator WString() const
{
if(IsNull()) return Null;
return GetType() == WSTRING_V ? RichValue<WString>::Extract(*this)
: ((String)(*this)).ToWString();//!!!
}
示例12: GetOtherString
String Value::GetOtherString() const
{
if(IsNull()) return Null;
return RichValue<WString>::Extract(*this).ToString();
}
示例13: ProcessSelectedImage
void QmitkExampleView::ProcessSelectedImage()
{
// Before we even think about processing something, we need to make sure
// that we have valid input. Don't be sloppy, this is a main reason
// for application crashes if neglected.
auto selectedDataNodes = this->GetDataManagerSelection();
if (selectedDataNodes.empty())
return;
auto firstSelectedDataNode = selectedDataNodes.front();
if (firstSelectedDataNode.IsNull())
{
QMessageBox::information(nullptr, "Example View", "Please load and select an image before starting image processing.");
return;
}
auto data = firstSelectedDataNode->GetData();
// Something is selected, but does it contain data?
if (data != nullptr)
{
// We don't use the auto keyword here, which would evaluate to a native
// image pointer. Instead, we want a smart pointer in order to ensure that
// the image isn't deleted somewhere else while we're using it.
mitk::Image::Pointer image = dynamic_cast<mitk::Image*>(data);
// Something is selected and it contains data, but is it an image?
if (image.IsNotNull())
{
auto imageName = firstSelectedDataNode->GetName();
auto offset = m_Controls.offsetSpinBox->value();
MITK_INFO << "Process image \"" << imageName << "\" ...";
// We're finally using the ExampleImageFilter from ExtExampleModule.
auto filter = ExampleImageFilter::New();
filter->SetInput(image);
filter->SetOffset(offset);
filter->Update();
mitk::Image::Pointer processedImage = filter->GetOutput();
if (processedImage.IsNull() || !processedImage->IsInitialized())
return;
MITK_INFO << " done";
// Stuff the resulting image into a data node, set some properties,
// and add it to the data storage, which will eventually display the
// image in the application.
auto processedImageDataNode = mitk::DataNode::New();
processedImageDataNode->SetData(processedImage);
QString name = QString("%1 (Offset: %2)").arg(imageName.c_str()).arg(offset);
processedImageDataNode->SetName(name.toStdString());
// We don't really need to copy the level window, but if we wouldn't
// do it, the new level window would be initialized to display the image
// with optimal contrast in order to capture the whole range of pixel
// values. This is also true for the input image as long as one didn't
// modify its level window manually. Thus, the images would appear
// identical unless you compare the level window widget for both images.
mitk::LevelWindow levelWindow;
if (firstSelectedDataNode->GetLevelWindow(levelWindow))
processedImageDataNode->SetLevelWindow(levelWindow);
// We also attach our ExampleImageInteractor, which allows us to paint
// on the resulting images by using the mouse as long as the CTRL key
// is pressed.
auto interactor = CreateExampleImageInteractor();
if (interactor.IsNotNull())
interactor->SetDataNode(processedImageDataNode);
this->GetDataStorage()->Add(processedImageDataNode);
}
}
// Now it's your turn. This class/method has lots of room for improvements,
// for example:
//
// - What happens when multiple items are selected but the first one isn't
// an image? - There isn't any feedback for the user at all.
// - What's the front item of a selection? Does it depend on the order
// of selection or the position in the Data Manager? - Isn't it
// better to process all selected images? Don't forget to adjust the
// titles of the UI widgets.
// - In addition to the the displayed label, it's probably a good idea to
// enable or disable the button depending on the selection.
}
示例14: OrderedList
/**
Get selection for OneOf and OrderedList (Left/Right will be ignored).
@param Selection Pointer to current selection.
@param MenuOption Pointer to the current input menu.
@retval EFI_SUCCESS If Option input is processed successfully
@retval EFI_DEVICE_ERROR If operation fails
**/
EFI_STATUS
GetSelectionInputPopUp (
IN UI_MENU_SELECTION *Selection,
IN UI_MENU_OPTION *MenuOption
)
{
EFI_STATUS Status;
EFI_INPUT_KEY Key;
UINTN Index;
CHAR16 *StringPtr;
CHAR16 *TempStringPtr;
UINTN Index2;
UINTN TopOptionIndex;
UINTN HighlightOptionIndex;
UINTN Start;
UINTN End;
UINTN Top;
UINTN Bottom;
UINTN PopUpMenuLines;
UINTN MenuLinesInView;
UINTN PopUpWidth;
CHAR16 Character;
INT32 SavedAttribute;
BOOLEAN ShowDownArrow;
BOOLEAN ShowUpArrow;
UINTN DimensionsWidth;
LIST_ENTRY *Link;
BOOLEAN OrderedList;
UINT8 *ValueArray;
UINT8 ValueType;
EFI_HII_VALUE HiiValue;
EFI_HII_VALUE *HiiValueArray;
UINTN OptionCount;
QUESTION_OPTION *OneOfOption;
QUESTION_OPTION *CurrentOption;
FORM_BROWSER_STATEMENT *Question;
INTN Result;
DimensionsWidth = gScreenDimensions.RightColumn - gScreenDimensions.LeftColumn;
ValueArray = NULL;
ValueType = 0;
CurrentOption = NULL;
ShowDownArrow = FALSE;
ShowUpArrow = FALSE;
StringPtr = AllocateZeroPool ((gOptionBlockWidth + 1) * 2);
ASSERT (StringPtr);
Question = MenuOption->ThisTag;
if (Question->Operand == EFI_IFR_ORDERED_LIST_OP) {
ValueArray = Question->BufferValue;
ValueType = Question->ValueType;
OrderedList = TRUE;
} else {
OrderedList = FALSE;
}
//
// Calculate Option count
//
if (OrderedList) {
for (Index = 0; Index < Question->MaxContainers; Index++) {
if (GetArrayData (ValueArray, ValueType, Index) == 0) {
break;
}
}
OptionCount = Index;
} else {
OptionCount = 0;
Link = GetFirstNode (&Question->OptionListHead);
while (!IsNull (&Question->OptionListHead, Link)) {
OneOfOption = QUESTION_OPTION_FROM_LINK (Link);
OptionCount++;
Link = GetNextNode (&Question->OptionListHead, Link);
}
}
//
// Prepare HiiValue array
//
HiiValueArray = AllocateZeroPool (OptionCount * sizeof (EFI_HII_VALUE));
ASSERT (HiiValueArray != NULL);
Link = GetFirstNode (&Question->OptionListHead);
for (Index = 0; Index < OptionCount; Index++) {
if (OrderedList) {
HiiValueArray[Index].Type = ValueType;
//.........这里部分代码省略.........
示例15: RTIMING
void VfkStream::ScanFile(int fx)
{
RTIMING("VfkStream::ScanFile");
Stream& strm = streams[fx];
int64 last_line = strm.GetSize();
while(last_line > 0) {
strm.Seek(last_line - 1);
if(strm.Get() == '\n')
break;
last_line--;
}
strm.Seek(0);
try {
int c;
int64 rowpos = strm.GetPos();
while((c = strm.Get()) == '&' && ((c = strm.Get()) == 'H' || c == 'D') && IsAlpha(strm.Term())) {
char type = c;
int64 begin = strm.GetPos();
SkipRow(strm);
rowpos = strm.GetPos();
int len = (int)(strm.GetPos() - begin);
StringBuffer linebuf(len + 1);
strm.Seek(begin);
strm.Get(linebuf, len);
linebuf[len] = 0;
const char *b = linebuf;
const char *id = b;
while(IsIdent(*++b))
;
String ident(id, b);
if(*b++ != ';')
throw Exc(NFormat("';' expected after '%s' (found: '%c', %2:02x)", ident, *b));
if(type == 'D') {
String fident = "X_" + ident;
int f = tables.Find(fident);
if(f < 0)
throw Exc(NFormat("unexpected data for filter table '%s'", ident));
// b = ScanRow(b, tables[f]);
}
else if(IsAlpha(*b)) {
String fident = "X_" + ident;
Table& tbl = tables.GetAdd(fident);
tbl.name = tbl.rawname = fident;
tbl.row_count = 0;
ScanHeader(b, tbl);
}
else {
do {
Vector<Value> row;
row.SetCount(HDR_COUNT);
if(*b == '\"') {
WString text = ReadString(b, &b);
if(IsDateTime(ident) && !IsNull(text)) {
Time dt = VfkReadTime(text.ToString(), NULL);
if(IsNull(dt))
throw Exc(NFormat("invalid date/time value %s", AsCString(text.ToString())));
row[HDR_DTM] = dt;
}
else {
row[HDR_STR] = text;
if(ident == "CODEPAGE")
if(text == WString("EE8MSWIN1250")) charset = CHARSET_WIN1250;
}
}
else {
double num = ScanDouble(b, &b);
if(IsNull(num))
throw Exc("invalid numeric value");
row[HDR_NUM] = num;
}
int l = header.FindLast(ident);
row[HDR_ID] = ident;
row[HDR_ORD] = (l >= 0 ? (int)header[l][HDR_ORD] + 1 : 0);
header.Add(ident) = row;
}
while(*b++ == ';');
b--;
}
}
strm.Seek(rowpos);
while(strm.Get() == '&' && strm.Get() == 'B' && IsAlpha(strm.Term())) {
int64 header_offset = strm.GetPos();
SkipRow(strm);
int64 begin_offset = strm.GetPos();
int len = (int)(begin_offset - header_offset);
Buffer<char> linebuf(len + 1);
strm.Seek(header_offset);
strm.Get(linebuf, len);
linebuf[len] = 0;
const char *b = linebuf;
const char *id = b;
while(IsIdent(*++b))
;
int idlen = b - id;
String ident(id, b);
if(*b++ != ';')
throw Exc(NFormat("';' expected after '%s' (found: '%c', %2:02x)", ident, *b));
String name = ident;
for(const VFKLongName *ln = vfk_long_names; ln->shortname; ln++)
if(name == ln->shortname) {
//.........这里部分代码省略.........