本文整理匯總了C++中DebugAssert函數的典型用法代碼示例。如果您正苦於以下問題:C++ DebugAssert函數的具體用法?C++ DebugAssert怎麽用?C++ DebugAssert使用的例子?那麽, 這裏精選的函數代碼示例或許可以為您提供幫助。
在下文中一共展示了DebugAssert函數的15個代碼示例,這些例子默認根據受歡迎程度排序。您可以為喜歡或者感覺有用的代碼點讚,您的評價將有助於係統推薦出更棒的C++代碼示例。
示例1: DebugAssert
MBChar * String::FromDoubleMB( MBChar * outStr, Double fValue, UInt iMinDigits, UInt iMaxDigits ) const
{
// Clamp digits range
DebugAssert( iMinDigits < iMaxDigits );
if ( iMinDigits < 1 ) iMinDigits = 1;
if ( iMaxDigits > 16 ) iMaxDigits = 16;
UInt iRemaining = ( iMaxDigits - iMinDigits );
// Zero case
if ( fValue == 0.0 || fValue == -0.0 ) {
*outStr++ = MBTEXT('0');
*outStr++ = MBTEXT('.');
*outStr++ = MBTEXT('0');
while( iMinDigits > 2 ) {
*outStr++ = MBTEXT('0');
--iMinDigits;
}
*outStr = MBNULLBYTE;
return outStr;
}
// Print sign
if ( fValue < 0.0 ) {
fValue = -fValue;
*outStr++ = MBTEXT('-');
}
// Extract exponent
Int iExponent = 0;
while( fValue >= 1.0 ) {
fValue *= 0.1;
++iExponent;
}
while( fValue < 0.1 ) {
fValue *= 10.0;
--iExponent;
}
while( iMinDigits > 0 ) {
fValue *= 10.0;
--iExponent;
--iMinDigits;
}
// Print integer part
Int64 iIntPart = (Int64)fValue;
outStr = FromIntMB( outStr, iIntPart );
// Print dot
*outStr++ = MBTEXT('.');
// Print fraction part
Double fFractPart = ( fValue - (Double)iIntPart );
while( iRemaining > 0 ) {
fFractPart *= 10.0;
--iRemaining;
}
outStr = FromIntMB( outStr, (Int64)fFractPart );
// Remove trailing 0s
--outStr;
while( *outStr == MBTEXT('0') )
--outStr;
if ( *outStr == MBTEXT('.') ) {
++outStr;
*outStr++ = MBTEXT('0');
} else
++outStr;
// Print exponent
if ( iExponent != 0 ) {
*outStr++ = MBTEXT('e');
outStr = FromIntMB( outStr, iExponent );
}
*outStr = MBNULLBYTE;
return outStr;
}
示例2: DebugAssert
//---------------------------------------------------------------------------
void __fastcall TKeyGenerator::StartGenerationThread()
{
DebugAssert(FState == kgInitialized);
FState = kgGenerating;
new TKeyGenerationThread(this);
}
示例3: KEY
//---------------------------------------------------------------------------
void __fastcall TCustomWinConfiguration::SaveData(
THierarchicalStorage * Storage, bool All)
{
TGUIConfiguration::SaveData(Storage, All);
// duplicated from core\configuration.cpp
#define KEY(TYPE, VAR) Storage->Write ## TYPE(LASTELEM(UnicodeString(TEXT(#VAR))), VAR)
REGCONFIG(true);
#undef KEY
if (FHistory->Count > 0)
{
if (Storage->OpenSubKey(L"History", true))
{
try
{
THistoryStrings * HistoryStrings;
for (int Index = 0; Index < FHistory->Count; Index++)
{
HistoryStrings = dynamic_cast<THistoryStrings *>(FHistory->Objects[Index]);
DebugAssert(HistoryStrings != NULL);
if (All || HistoryStrings->Modified)
{
if (Storage->OpenSubKey(FHistory->Strings[Index], true))
{
try
{
Storage->WriteValues(HistoryStrings);
}
__finally
{
Storage->CloseSubKey();
}
}
}
}
}
__finally
{
Storage->CloseSubKey();
}
}
if (Storage->OpenSubKey(L"HistoryParams", true))
{
try
{
THistoryStrings * HistoryStrings;
for (int Index = 0; Index < FHistory->Count; Index++)
{
HistoryStrings = dynamic_cast<THistoryStrings *>(FHistory->Objects[Index]);
DebugAssert(HistoryStrings != NULL);
if (All || HistoryStrings->Modified)
{
bool HasData = false;
for (int VIndex = 0; !HasData && (VIndex < HistoryStrings->Count); VIndex++)
{
HasData = (HistoryStrings->Objects[VIndex] != NULL);
}
if (!HasData)
{
Storage->RecursiveDeleteSubKey(FHistory->Strings[Index]);
}
else if (Storage->OpenSubKey(FHistory->Strings[Index], true))
{
try
{
Storage->ClearValues();
for (int VIndex = 0; VIndex < HistoryStrings->Count; VIndex++)
{
void * Data = HistoryStrings->Objects[VIndex];
Storage->WriteBinaryData(IntToStr(VIndex), &Data, sizeof(Data));
}
}
__finally
{
Storage->CloseSubKey();
}
}
}
}
}
__finally
{
Storage->CloseSubKey();
}
}
}
示例4: ConfigureW
int WINAPI ConfigureW(int item)
{
DebugAssert(FarPlugin);
TFarPluginGuard Guard;
return static_cast<int>(FarPlugin->Configure(static_cast<intptr_t>(item)));
}
示例5: KeyGenerationProgressUpdate
//---------------------------------------------------------------------------
void KeyGenerationProgressUpdate(void * Thread,
int Action, int Phase, int IProgress)
{
DebugAssert(Thread);
((TKeyGenerationThread*)Thread)->ProgressUpdate(Action, Phase, IProgress);
}
示例6: GetMinFarVersionW
int WINAPI GetMinFarVersionW()
{
DebugAssert(FarPlugin);
TFarPluginGuard Guard;
return static_cast<int>(FarPlugin->GetMinFarVersion());
}
示例7: ExitFARW
void WINAPI ExitFARW()
{
DebugAssert(FarPlugin);
TFarPluginGuard Guard;
FarPlugin->ExitFAR();
}
示例8: DebugAssert
HTTPConnection::~HTTPConnection()
{
DebugAssert(mReqs.empty());
delete mSocket;
}
示例9: DebugAssert
WED_PackageMgr::~WED_PackageMgr()
{
DebugAssert(gPackageMgr==this);
gPackageMgr=NULL;
}
示例10: pick_major_axis
int pick_major_axis(
vector<pair<Pmwx::Halfedge_handle, Pmwx::Halfedge_handle> >& sides, // Per side: inclusive range of half-edges "consolidated" into the sides.
Polygon2& bounds, // Inset boundary in metric, first side matched to the list.
Vector2& v_x,
Vector2& v_y)
{
// special case: if we find a block with exactly ONE right angle, the longer of the two
// sides going into the right angle is hte major axis, full stop, we're done.
int right_angle = -1;
for(int i = 0; i < sides.size(); ++i)
{
int j = (i + 1) % sides.size();
int k = (i + 2) % sides.size();
Vector2 vx(Vector2(bounds[i],bounds[j]));
Vector2 vy(Vector2(bounds[j],bounds[k]));
vx.normalize();
vy.normalize();
double dot = fabs(vx.dot(vy));
if(dot < 0.087155742747658)
{
if(right_angle == -1)
right_angle = j;
else
right_angle = -2; // "more than one right angle" flag - causes us to NOT try this algo.
}
}
if(right_angle >= 0)
{
int prev = (right_angle + sides.size() - 1) % sides.size();
int next = (right_angle + 1) % sides.size();
Vector2 vp(Vector2(bounds[prev],bounds[right_angle]));
Vector2 vn(Vector2(bounds[right_angle],bounds[next]));
double pl = vp.normalize();
double nl = vn.normalize();
if(pl > nl)
v_x = vp;
else
v_x = vn;
v_y = v_x.perpendicular_ccw();
return right_angle;
}
// THIS is the algo we shipped with - it tries to minimize the short side axis of the block. This works
// okay but tends to make the diagonal of diagonal cuts (like Broadway) the main axis since (by the pythag
// theorem) that slightly reduces the block depth.
#if 0
int shortest = -1;
double thinnest_so_far = 0.0;
for(int i = 0; i < sides.size(); ++i)
{
Vector2 vx = Vector2(bounds.side(i).p1,bounds.side(i).p2);
vx.normalize();
Vector2 vy = vx.perpendicular_ccw();
double bbox[4];
bbox[0] = bbox[2] = vx.dot(Vector2(bounds[0]));
bbox[1] = bbox[3] = vy.dot(Vector2(bounds[0]));
for(int j = 0; j < sides.size(); ++j)
{
double x = vx.dot(Vector2(bounds[j]));
double y = vy.dot(Vector2(bounds[j]));
bbox[0] = dobmin2(bbox[0], x);
bbox[1] = dobmin2(bbox[1], y);
bbox[2] = dobmax2(bbox[2], x);
bbox[3] = dobmax2(bbox[3], y);
}
double xdist = fabs(bbox[2]-bbox[0]);
double ydist = fabs(bbox[3]-bbox[1]);
double my_dist = dobmin2(xdist,ydist);
if(shortest == -1 || my_dist < thinnest_so_far)
{
shortest = i;
thinnest_so_far = my_dist;
if(xdist < ydist)
{
v_x = vx.perpendicular_ccw();
v_y = vy.perpendicular_ccw();
}
else
{
v_x = vx;
v_y = vy;
}
}
}
DebugAssert(shortest >= 0);
return shortest;
#endif
#if 1
// #error This algo works 95% of the time, but 5% of the time it picks a slashed short end as the
// #error long axis, which gives a long thin block a wrong axis alignment and a huge AABB. Bad!
// The basic idea: we want to pick the grid axis MOST aligned with the block such that
// the major axis supports roads.
//.........這裏部分代碼省略.........
示例11: build_convex_polygon
bool build_convex_polygon(
Pmwx::Ccb_halfedge_circulator ccb,
vector<pair<Pmwx::Halfedge_handle, Pmwx::Halfedge_handle> >& sides,
const CoordTranslator2& trans,
Polygon2& metric_bounds,
double max_err_mtrs,
double min_side_len)
{
double e_sq = max_err_mtrs*max_err_mtrs;
sides.clear();
metric_bounds.clear();
Pmwx::Ccb_halfedge_circulator circ(ccb);
// Bbox2 bounds;
//
// do {
// bounds += cgal2ben(circ->source()->point());
// } while (++circ != ccb);
Pmwx::Ccb_halfedge_circulator start,next;
start = ccb;
do {
--start;
if(!sides_can_merge(start,ccb))
break;
if(!within_err_metric(start,ccb,trans,e_sq))
break;
} while(start != ccb);
++start;
// now we can go around.
circ = start;
//int ne = count_circulator(start);
//printf("Poly has %d sides.\n", ne);
do {
Pmwx::Ccb_halfedge_circulator stop(circ);
do {
++stop;
} while(sides_can_merge(circ,stop) && within_err_metric(circ,stop,trans,e_sq) && stop != start);
--stop;
//printf("Pushing side of %d, %d\n", circulator_distance_to(start, circ),circulator_distance_to(start,stop));
sides.push_back(pair<Pmwx::Halfedge_handle,Pmwx::Halfedge_handle>(circ, stop));
++stop;
circ = stop;
} while(circ != start);
if(sides.size() < 3)
{
//debug_mesh_point(bounds.centroid(),1,1,1);
return false;
}
int i, j, k;
vector<Segment2> msides;
for(i = 0; i < sides.size(); ++i)
{
j = (i + 1) % sides.size();
DebugAssert(sides[i].second->target() == sides[j].first->source());
msides.push_back(Segment2(
trans.Forward(cgal2ben(sides[i].first->source()->point())),
trans.Forward(cgal2ben(sides[i].second->target()->point()))));
}
vector<Segment2> debug(msides);
for(i = 0; i < sides.size(); ++i)
{
j = (i + 1) % sides.size();
Vector2 v1(msides[i].p1,msides[i].p2);
Vector2 v2(msides[j].p1,msides[j].p2);
v1.normalize();
v2.normalize();
if(v1.dot(v2) > 0.9998 ||
!v1.left_turn(v2))
{
//debug_mesh_point(trans.Reverse(msides[i].p2),1,0,0);
return false;
}
double w = width_for_he(sides[i].first);
if(w)
{
v1 = v1.perpendicular_ccw();
v1 *= w;
msides[i].p1 += v1;
msides[i].p2 += v1;
}
}
for(j = 0; j < sides.size(); ++j)
{
i = (j + sides.size() - 1) % sides.size();
Line2 li(msides[i]), lj(msides[j]);
Point2 p;
if(!li.intersect(lj,p))
{
Assert(!"Failure to intersect.\n");
return false;
}
//.........這裏部分代碼省略.........
示例12: is_locked
bool is_locked(Block_2::Vertex_handle v) const
{
DebugAssert(v->degree() == 2);
Block_2::Halfedge_handle he = v->incident_halfedges();
return he->face()->is_unbounded() || he->twin()->face()->is_unbounded();
}
示例13: create_block
// We build a block from scratch with a bunch of polygons. Note that where polygons overlap, the earliest one in the block will "win" - that is, unneeded halfedges
// WILL exist, but the "tags" will match the lower prio blokc data.
void create_block(
Block_2& block,
const vector<BLOCK_face_data>& in_data,
const vector<Block_2::X_monotone_curve_2>& in_bounds,
int unbounded_idx)
{
block.clear();
#if DEV
for(int n = 0; n < in_data.size(); ++n)
if(in_data[n].usage == usage_Polygonal_Feature)
DebugAssert(in_data[n].feature != 0);
#endif
// First we are going to build up a curve list and bulk insert them all. Each curve has the polygon number as its data.
// This should be faster than doing a series of piece-wise inserts.
#if 0
vector<Block_2::X_monotone_curve_2> keep;
set<pair<Point_2,Point_2> > we_have;
for(int n = 0; n < in_bounds.size(); ++n)
{
pair<Point_2,Point_2> s(in_bounds[n].source(),in_bounds[n].target());
if(s.first < s.second) swap(s.first,s.second);
if(we_have.count(s) == 0)
{
keep.push_back(in_bounds[n]);
we_have.insert(s);
}
}
CGAL::insert(block, keep.begin(), keep.end());
#endif
CGAL::insert(block, in_bounds.begin(), in_bounds.end());
#if 0
FastCDT cdt;
FastCDT::Face_handle hint;
vector<pair<FastCDT::Vertex_handle, FastCDT::Vertex_handle> > vv;
set<pair<FastCDT::Vertex_handle, FastCDT::Vertex_handle> > we_have;
for(int n = 0; n < in_bounds.size(); ++n)
{
pair<FastCDT::Vertex_handle,FastCDT::Vertex_handle> r;
r.first = cdt.insert(C(in_bounds[n].source()),hint);
hint = r.first->face();
r.second = cdt.insert(C(in_bounds[n].target()),hint);
hint = r.second->face();
if(r.first < r.second) swap(r.first,r.second);
if(we_have.count(r) == 0)
{
we_have.insert(r);
vv.push_back(r);
}
}
for(int n = 0; n < vv.size(); ++n)
{
DebugAssert(vv[n].first != vv[n].second);
cdt.insert_constraint(vv[n].first,vv[n].second);
}
#endif
// Now we go back and do a search from the outside in, toggling our "membership" each time we cross a bounding edge, to keep track of
// which face we are in.
for(Block_2::Face_iterator f = block.faces_begin(); f != block.faces_end(); ++f)
f->set_visited(false);
apply_properties_visitor visitor;
visitor.feature_map = &in_data;
// What is this? The FIRST contour is considered the contour that tags the unbounded polygon. So we "start" with this polygon in effect.
if(unbounded_idx != -1)
visitor.initial.insert(unbounded_idx);
visitor.Visit(&block);
#if DEV
for (Block_2::Face_iterator f = block.faces_begin(); f != block.faces_end(); ++f)
if(f->data().usage == usage_Polygonal_Feature)
DebugAssert(f->data().feature != 0);
#endif
}
示例14: WED_DoSplit
void WED_DoSplit(IResolver * resolver)
{
ISelection * sel = WED_GetSelect(resolver);
IOperation * op = dynamic_cast<IOperation *>(sel);
vector<WED_Thing *> who;
hack_t info;
info.first = sel;
info.second = &who;
sel->IterateSelectionOr(collect_splits, &info);
if (who.empty()) return;
op->StartOperation("Split Segments.");
for (vector<WED_Thing *>::iterator w = who.begin(); w != who.end(); ++w)
{
WED_Thing * parent = (*w)->GetParent();
IGISPointSequence * seq = dynamic_cast<IGISPointSequence *>(parent);
WED_Thing * new_w = (WED_Thing *) (*w)->Clone();
IGISPoint * as_p = dynamic_cast<IGISPoint *>(new_w);
IGISPoint_Bezier * as_bp = dynamic_cast<IGISPoint_Bezier *>(new_w);
Segment2 seg;
Bezier2 bez;
// set<int> attrs;
// node->GetAttributes(attrs);
/// new_node->SetAttributes(attrs);
if (seq->GetSide(gis_Geo,(*w)->GetMyPosition(),seg,bez))
{
IGISPoint_Bezier * pre = dynamic_cast<IGISPoint_Bezier *>(*w);
IGISPoint_Bezier * follow = dynamic_cast<IGISPoint_Bezier *>(parent->GetNthChild(((*w)->GetMyPosition()+1) % parent->CountChildren()));
DebugAssert(as_bp);
DebugAssert(pre);
DebugAssert(follow);
Bezier2 b1, b2;
bez.partition(b1,b2);
as_bp->SetLocation(gis_Geo,b2.p1);
as_bp->SetSplit(false);
as_bp->SetControlHandleHi(gis_Geo,b2.c1);
pre->SetSplit(true);
pre->SetControlHandleHi(gis_Geo,b1.c1);
follow->SetSplit(true);
follow->SetControlHandleLo(gis_Geo,b2.c2);
if(as_bp->HasLayer(gis_UV))
{
seq->GetSide(gis_UV,(*w)->GetMyPosition(),seg,bez);
bez.partition(b1,b2);
as_bp->SetLocation(gis_UV,b2.p1);
as_bp->SetControlHandleHi(gis_UV,b2.c1);
as_bp->SetControlHandleLo(gis_UV,b1.c2);
pre->SetControlHandleHi(gis_UV,b1.c1);
follow->SetControlHandleLo(gis_UV,b2.c2);
}
}
else
{
DebugAssert(as_p);
as_p->SetLocation(gis_Geo,seg.midpoint());
if(as_p->HasLayer(gis_UV))
{
seq->GetSide(gis_UV,(*w)->GetMyPosition(),seg,bez);
as_p->SetLocation(gis_UV,seg.midpoint());
}
}
new_w->SetParent(parent, (*w)->GetMyPosition() + 1);
string name;
new_w->GetName(name);
name += ".1";
new_w->SetName(name);
sel->Insert(new_w);
}
op->CommitOperation();
}
示例15: CopyToClipboard
void CopyToClipboard(UnicodeString AText)
{
DebugAssert(FarPlugin != nullptr);
FarPlugin->FarCopyToClipboard(AText);
}