YSTest: Language Implementation Hints

YSTest PreAlpha_b500_20140530 The YSLib Test Project

- 首页
- 相关页面
- 模块
- 命名空间
- 类
- 文件

全部 类 命名空间 文件 函数 变量 类型定义 枚举 枚举值 友元 宏定义 组 页
宏定义
Language Implementation Hints

语言实现的提供的附加提示。 更多...

## 宏定义

#define | YB_ATTR(...)
| 属性。 更多...
#define | YB_ALLOCATOR
| 指示修饰的是分配器，或返回分配器调用的函数或函数模板。 更多...
#define | YB_EXPECT(expr, constant) (expr)
#define | YB_LIKELY(expr) (expr)
#define | YB_UNLIKELY(expr) (expr)
| 分支预测提示。 更多...
#define | YB_NORETURN
| 指定无返回值函数。 更多...
#define | YB_PURE
| 指示函数或函数模板实例为纯函数。 更多...
#define | YB_STATELESS
| 指示函数或函数模板实例为无状态函数。 更多...

## 详细描述

语言实现的提供的附加提示。

自从
  build 294

保证忽略时不导致运行时语义差异的提示，主要用于便于实现可能的优化。

## 宏定义说明

#define YB_ALLOCATOR

指示修饰的是分配器，或返回分配器调用的函数或函数模板。

注解
  指示行为类似 std::malloc 或 std::calloc 等的函数。

警告
  要求满足指示的假定，否则行为未定义。

自从
  build 373

指示函数若返回非空指针，返回的指针不是其它任何有效指针的别名， 且指针指向的存储内容不由其它存储决定。

在文件 ydef.h 第 281 行定义.

#define YB_ATTR | ( |  | ... | ) |

属性。

警告
  不检查指令。用户应验证可能使用的指令中的标识符在宏替换后能保持正确。

自从
  build 373

在文件 ydef.h 第 265 行定义.

#define YB_EXPECT | ( |  | expr,
|  |  | constant
| ) |  | (expr)

在文件 ydef.h 第 296 行定义.

#define YB_LIKELY | ( |  | expr | ) | (expr)

在文件 ydef.h 第 297 行定义.

参考自 YSLib::Drawing::TextRegion::ClearLine(), YSLib::ClearSequence(), YSLib::Drawing::CopyBuffer(), YSLib::Drawing::CreateRawBitmap(), YSLib::Shells::Shell::DefShlProc(), YSLib::Drawing::DrawCross(), YSLib::UI::Menu::DrawItem(), YSLib::Drawing::DrawPolygon(), YSLib::Drawing::DrawRect(), YSLib::Drawing::DrawRectRoundCorner(), YSLib::Drawing::DrawTick(), YReader::FetchEncodingString(), platform_ex::Android::FetchNativeLooper(), YSLib::Drawing::FontCache::FontCache(), platform::GetFileSizeOf(), YSLib::Text::TextFileBuffer::GetIterator(), YSLib::Text::TextFileBuffer::GetPosition(), YSLib::HandleToReference(), YSLib::Drawing::FontCache::InitializeDefaultTypeface(), YSLib::IO::ListFiles(), YSLib::DS::UI::DualScreenReader::LoadText(), YReader::ShlTextReader::Locate(), YSLib::UI::LocateForWidgetNode(), CHRLib::GUCS2Mapper< CharSet::UTF_8 >::Map(), CHRLib::GUCS2Mapper< CharSet::GBK >::Map(), YReader::ShlTextReader::OnKeyDown(), YSLib::ExpandMemberFirst< _type, _tRet, _tPara, _tNew >::operator()(), YSLib::ExpandMemberFirstBinder< _type, _tRet, _tPara, _tNew >::operator()(), YSLib::UI::Renderer::Paint(), YSLib::Drawing::PrintChar(), YSLib::ReadConfiguration(), YSLib::UI::ProgressBar::Refresh(), YSLib::Drawing::TextRegion::Scroll(), YSLib::DS::UI::DualScreenReader::ScrollByPixel(), YSLib::Drawing::CompactPixmap::SetContent(), YSLib::UI::MTextList::SetList(), YSLib::Drawing::CompactPixmap::SetSize(), YSLib::Application::Switch(), YSLib::Drawing::TransformRect(), platform::u16getcwd_n(), YSLib::Uninitialize(), YSLib::Devices::InputManager::Update(), YReader::ReaderBox::UpdateData() , 以及 YSLib::DS::UI::DualScreenReader::UpdateView().

#define YB_NORETURN

指定无返回值函数。

警告
  当指定的函数调用实际返回时行为未定义。

自从
  build 396

待办事项:
  使用 ISO C++11 noreturn 属性。

在文件 ydef.h 第 311 行定义.

#define YB_PURE

指示函数或函数模板实例为纯函数。

后置条件
  函数外可访问的存储保持不变。

注解
  假定函数保证可返回；返回类型 void 时无意义。
  假定函数无外部可见的副作用：局部记忆化合并重复调用后不改变可观察行为。
  不修改函数外部的存储；不访问函数外部 volatile 存储； 通常不调用不可被 YB_PURE 安全指定的函数。

警告
  要求满足指示的假定，否则行为未定义。

自从
  build 373

指示函数或函数模板的求值是返回值的计算，无影响其它的存储的副作用， 且返回值只依赖于参数和/或编译时确定内存位置（如具有静态存储期的对象的）存储的值。

在文件 ydef.h 第 331 行定义.

#define YB_STATELESS

指示函数或函数模板实例为无状态函数。

后置条件
  函数外可访问的存储保持不变。

注解
  假定函数保证可返回；返回类型 void 时无意义。
  假定函数无外部可见的副作用：局部记忆化合并重复调用后不改变可观察行为。
  假定函数调用的结果总是相同：返回值总是不可分辨的右值或指示同一个内存位置的 左值。任意以一次调用结果替代调用或合并重复调用时不改变可观察行为。
  不访问函数外部的存储；通常不调用不可被 YB_STATELESS 安全指定的函数。
  可被安全指定的函数或函数模板是 YB_PURE 限定的函数或函数模板的真子集。

警告
  要求满足指示的假定，否则行为未定义。

自从
  build 373

指示函数或函数模板的求值是返回值的计算，返回值只依赖于参数的值，和其它存储无关。 若参数是对象指针或引用类型，还必须保证指向或引用的对象是其它参数，或者不被使用。 函数实现不能调用其它不能以 YB_STATELESS 限定的函数。

在文件 ydef.h 第 354 行定义.

#define YB_UNLIKELY | ( |  | expr | ) | (expr)

分支预测提示。

自从
  build 313

在文件 ydef.h 第 298 行定义.

参考自 YSLib::CacheLookup(), YSLib::IO::ClassifyPath(), YSLib::Drawing::TextRegion::ClearLine(), platform_ex::Windows::WindowReference::Close(), YSLib::GUIApplication::DealMessage(), YSLib::Execute(), YSLib::DS::UI::DualScreenReader::Execute(), YSLib::FetchDefaultFontCache(), YSLib::Drawing::FetchDefaultTypeface(), YSLib::FetchMIMEBiMapping(), YSLib::FetchRoot(), CHRLib::FillByte(), platform_ex::Windows::WindowReference::GetClientLocation(), platform_ex::Windows::WindowReference::GetClientSize(), YSLib::Drawing::NativeFontSize::GetSizeRec(), YSLib::Drawing::FontCache::GetTypefacePtr(), YSLib::Drawing::FontFamily::GetTypefaceRef(), platform_ex::Windows::HostWindow::HostWindow(), platform_ex::Windows::WindowReference::Invalidate(), YSLib::Drawing::Typeface::LookupGlyphIndex(), YSLib::Drawing::Typeface::LookupSize(), CHRLib::GUCS2Mapper< CharSet::UTF_8 >::Map(), CHRLib::GUCS2Mapper< CharSet::GBK >::Map(), CHRLib::GUCS2Mapper< CharSet::UTF_16BE >::Map(), CHRLib::GUCS2Mapper< CharSet::UTF_16LE >::Map(), platform_ex::Windows::WindowReference::Move(), YSLib::Text::TextFileBuffer::iterator::operator++(), ystdex::ifile_iterator::operator++(), YSLib::Drawing::PutCharBase(), YSLib::ReadConfiguration(), YSLib::FPSCounter::Refresh(), YSLib::UI::InputTimer::RefreshClick(), YSLib::Timers::Timer::RefreshDelta(), YSLib::UI::InputTimer::RefreshHeld(), YSLib::Timers::Timer::RefreshRemainder(), YReader::ShlTextReader::Scroll(), YSLib::DS::UI::DualScreenReader::ScrollByPixel(), NPL::Session::Session(), platform_ex::Windows::WindowReference::SetOpacity(), platform_ex::Windows::WindowReference::SetText(), platform::StartTicks(), ystdex::strcpycat(), YSLib::TranslateTime(), platform_ex::Windows::WindowMemorySurface::UpdatePremultiplied(), YSLib::DS::UI::DualScreenReader::UpdateView() , 以及 YSLib::WriteConfiguration().