本文整理汇总了C++中TLS类的典型用法代码示例。如果您正苦于以下问题:C++ TLS类的具体用法?C++ TLS怎么用?C++ TLS使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了TLS类的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。
示例1:
static const char *LocalScoreToStr(SCORE s)
{
static TLS<char[16]> str;
if (s < -100000)
return " *";
sprintf(str.get(), "%6.1f", s);
return str.get();
}
开发者ID:Wyss,项目名称:mauve-py,代码行数:8,代码来源:nwdasimple.cpp
示例2: SaveCurrentAlignment
void SaveCurrentAlignment()
{
extern TLS<MSA *>ptrBestMSA;
static TLS<bool> bCalled(false);
if (bCalled.get())
{
fprintf(stderr,
"\nRecursive call to SaveCurrentAlignment, giving up attempt to save.\n");
exit(EXIT_FatalError);
}
if (0 == ptrBestMSA.get())
{
fprintf(stderr, "\nAlignment not completed, cannot save.\n");
Log("Alignment not completed, cannot save.\n");
exit(EXIT_FatalError);
}
if (0 == pstrOutputFileName.get())
{
fprintf(stderr, "\nOutput file name not specified, cannot save.\n");
exit(EXIT_FatalError);
}
fprintf(stderr, "\nSaving current alignment ...\n");
TextFile fileOut(pstrOutputFileName.get(), true);
ptrBestMSA.get()->ToFASTAFile(fileOut);
fprintf(stderr, "Current alignment saved to \"%s\".\n", pstrOutputFileName.get());
Log("Current alignment saved to \"%s\".\n", pstrOutputFileName.get());
}
开发者ID:Wyss,项目名称:mauve-py,代码行数:32,代码来源:savebest.cpp
示例3: SetOutputFileName
namespace muscle {
static TLS<const char *> pstrOutputFileName;
void SetOutputFileName(const char *out)
{
pstrOutputFileName.get() = out;
}
void SetCurrentAlignment(MSA &msa)
{
extern TLS<MSA *>ptrBestMSA;
ptrBestMSA.get() = &msa;
}
void SaveCurrentAlignment()
{
extern TLS<MSA *>ptrBestMSA;
static TLS<bool> bCalled(false);
if (bCalled.get())
{
fprintf(stderr,
"\nRecursive call to SaveCurrentAlignment, giving up attempt to save.\n");
exit(EXIT_FatalError);
}
if (0 == ptrBestMSA.get())
{
fprintf(stderr, "\nAlignment not completed, cannot save.\n");
Log("Alignment not completed, cannot save.\n");
exit(EXIT_FatalError);
}
if (0 == pstrOutputFileName.get())
{
fprintf(stderr, "\nOutput file name not specified, cannot save.\n");
exit(EXIT_FatalError);
}
fprintf(stderr, "\nSaving current alignment ...\n");
TextFile fileOut(pstrOutputFileName.get(), true);
ptrBestMSA.get()->ToFASTAFile(fileOut);
fprintf(stderr, "Current alignment saved to \"%s\".\n", pstrOutputFileName.get());
Log("Current alignment saved to \"%s\".\n", pstrOutputFileName.get());
}
void CheckMaxTime()
{
if (0 == g_ulMaxSecs.get())
return;
time_t Now = time(0);
time_t ElapsedSecs = Now - GetStartTime();
if (ElapsedSecs <= (time_t) g_ulMaxSecs.get())
return;
Log("Max time %s exceeded, elapsed seconds = %ul\n",
MaxSecsToStr(), ElapsedSecs);
SaveCurrentAlignment();
exit(EXIT_Success);
}
}
开发者ID:Wyss,项目名称:mauve-py,代码行数:66,代码来源:savebest.cpp
示例4: MIN
namespace muscle {
// UPGMA clustering in O(N^2) time and space.
#define TRACE 0
#define MIN(x, y) ((x) < (y) ? (x) : (y))
#define MAX(x, y) ((x) > (y) ? (x) : (y))
#define AVG(x, y) (((x) + (y))/2)
static TLS<unsigned> g_uLeafCount;
static TLS<unsigned> g_uTriangleSize;
static TLS<unsigned> g_uInternalNodeCount;
static TLS<unsigned> g_uInternalNodeIndex;
// Triangular distance matrix is g_Dist.get(), which is allocated
// as a one-dimensional vector of length g_uTriangleSize.get().
// TriangleSubscript(i,j) maps row,column=i,j to the subscript
// into this vector.
// Row / column coordinates are a bit messy.
// Initially they are leaf indexes 0..N-1.
// But each time we create a new node (=new cluster, new subtree),
// we re-use one of the two rows that become available (the children
// of the new node). This saves memory.
// We keep track of this through the g_uNodeIndex.get() vector.
static TLS<dist_t *> g_Dist;
// Distance to nearest neighbor in row i of distance matrix.
// Subscript is distance matrix row.
static TLS<dist_t *> g_MinDist;
// Nearest neighbor to row i of distance matrix.
// Subscript is distance matrix row.
static TLS<unsigned *> g_uNearestNeighbor;
// Node index of row i in distance matrix.
// Node indexes are 0..N-1 for leaves, N..2N-2 for internal nodes.
// Subscript is distance matrix row.
static TLS<unsigned *> g_uNodeIndex;
// The following vectors are defined on internal nodes,
// subscripts are internal node index 0..N-2.
// For g_uLeft.get()/Right, value is the node index 0 .. 2N-2
// because a child can be internal or leaf.
static TLS<unsigned *> g_uLeft;
static TLS<unsigned *> g_uRight;
static TLS<dist_t *> g_Height;
static TLS<dist_t *> g_LeftLength;
static TLS<dist_t *> g_RightLength;
static inline unsigned TriangleSubscript(unsigned uIndex1, unsigned uIndex2)
{
#if DEBUG
if (uIndex1 >= g_uLeafCount.get() || uIndex2 >= g_uLeafCount.get())
Quit("TriangleSubscript(%u,%u) %u", uIndex1, uIndex2, g_uLeafCount.get());
#endif
unsigned v;
if (uIndex1 >= uIndex2)
v = uIndex2 + (uIndex1*(uIndex1 - 1))/2;
else
v = uIndex1 + (uIndex2*(uIndex2 - 1))/2;
assert(v < (g_uLeafCount.get()*(g_uLeafCount.get() - 1))/2);
return v;
}
static void ListState()
{
Log("Dist matrix\n");
Log(" ");
for (unsigned i = 0; i < g_uLeafCount.get(); ++i)
{
if (uInsane == g_uNodeIndex.get()[i])
continue;
Log(" %5u", g_uNodeIndex.get()[i]);
}
Log("\n");
for (unsigned i = 0; i < g_uLeafCount.get(); ++i)
{
if (uInsane == g_uNodeIndex.get()[i])
continue;
Log("%5u ", g_uNodeIndex.get()[i]);
for (unsigned j = 0; j < g_uLeafCount.get(); ++j)
{
if (uInsane == g_uNodeIndex.get()[j])
continue;
if (i == j)
Log(" ");
else
{
unsigned v = TriangleSubscript(i, j);
Log("%5.2g ", g_Dist.get()[v]);
}
}
Log("\n");
}
Log("\n");
Log(" i Node NrNb Dist\n");
Log("----- ----- ----- --------\n");
//.........这里部分代码省略.........
开发者ID:Wyss,项目名称:mauve-py,代码行数:101,代码来源:upgma2.cpp
示例5: DistKmer20_3
namespace muscle {
const unsigned TRIPLE_COUNT = 20*20*20;
struct TripleCount
{
unsigned m_uSeqCount; // How many sequences have this triple?
unsigned short *m_Counts; // m_Counts[s] = nr of times triple found in seq s
};
static TLS<TripleCount *> TripleCounts;
// WARNING: Sequences MUST be stripped of gaps and upper case!
void DistKmer20_3(const SeqVect &v, DistFunc &DF)
{
const unsigned uSeqCount = v.Length();
DF.SetCount(uSeqCount);
if (0 == uSeqCount)
return;
for (unsigned uSeq1 = 0; uSeq1 < uSeqCount; ++uSeq1)
{
DF.SetDist(uSeq1, uSeq1, 0);
for (unsigned uSeq2 = 0; uSeq2 < uSeq1; ++uSeq2)
DF.SetDist(uSeq1, uSeq2, 0);
}
const unsigned uTripleArrayBytes = TRIPLE_COUNT*sizeof(TripleCount);
TripleCounts.get() = (TripleCount *) malloc(uTripleArrayBytes);
if (0 == TripleCounts.get())
Quit("Not enough memory (TripleCounts)");
memset(TripleCounts.get(), 0, uTripleArrayBytes);
for (unsigned uWord = 0; uWord < TRIPLE_COUNT; ++uWord)
{
TripleCount &tc = *(TripleCounts.get() + uWord);
const unsigned uBytes = uSeqCount*sizeof(short);
tc.m_Counts = (unsigned short *) malloc(uBytes);
memset(tc.m_Counts, 0, uBytes);
}
for (unsigned uSeqIndex = 0; uSeqIndex < uSeqCount; ++uSeqIndex)
{
Seq &s = *(v[uSeqIndex]);
const unsigned uSeqLength = s.Length();
for (unsigned uPos = 0; uPos < uSeqLength - 2; ++uPos)
{
const unsigned uLetter1 = CharToLetterEx(s[uPos]);
if (uLetter1 >= 20)
continue;
const unsigned uLetter2 = CharToLetterEx(s[uPos+1]);
if (uLetter2 >= 20)
continue;
const unsigned uLetter3 = CharToLetterEx(s[uPos+2]);
if (uLetter3 >= 20)
continue;
const unsigned uWord = uLetter1 + uLetter2*20 + uLetter3*20*20;
assert(uWord < TRIPLE_COUNT);
TripleCount &tc = *(TripleCounts.get() + uWord);
const unsigned uOldCount = tc.m_Counts[uSeqIndex];
if (0 == uOldCount)
++(tc.m_uSeqCount);
++(tc.m_Counts[uSeqIndex]);
}
}
#if TRACE
{
Log("TripleCounts\n");
unsigned uGrandTotal = 0;
for (unsigned uWord = 0; uWord < TRIPLE_COUNT; ++uWord)
{
const TripleCount &tc = *(TripleCounts.get() + uWord);
if (0 == tc.m_uSeqCount)
continue;
const unsigned uLetter3 = uWord/(20*20);
const unsigned uLetter2 = (uWord - uLetter3*20*20)/20;
const unsigned uLetter1 = uWord%20;
Log("Word %6u %c%c%c %6u",
uWord,
LetterToCharAmino(uLetter1),
LetterToCharAmino(uLetter2),
LetterToCharAmino(uLetter3),
tc.m_uSeqCount);
unsigned uSeqCountWithThisWord = 0;
for (unsigned uSeqIndex = 0; uSeqIndex < uSeqCount; ++uSeqIndex)
{
const unsigned uCount = tc.m_Counts[uSeqIndex];
if (uCount > 0)
{
++uSeqCountWithThisWord;
Log(" %u=%u", uSeqIndex, uCount);
uGrandTotal += uCount;
}
}
if (uSeqCountWithThisWord != tc.m_uSeqCount)
//.........这里部分代码省略.........
开发者ID:Wyss,项目名称:mauve-py,代码行数:101,代码来源:fastdistjones.cpp
示例6: GapPenalty
namespace muscle {
#if DOUBLE_AFFINE
#define TRACE 0
#define TEST_SPFAST 0
static SCORE GapPenalty(unsigned uLength, bool Term, SCORE g, SCORE e)
{
//if (Term)
// {
// switch (g_TermGap)
// {
// case TERMGAP_Full:
// return g + (uLength - 1)*e;
// case TERMGAP_Half:
// return g/2 + (uLength - 1)*e;
// case TERMGAP_Ext:
// return uLength*e;
// }
// Quit("Bad termgap");
// }
//else
// return g + (uLength - 1)*e;
//return MINUS_INFINITY;
return g + (uLength - 1)*e;
}
static SCORE GapPenalty(unsigned uLength, bool Term)
{
SCORE s1 = GapPenalty(uLength, Term, g_scoreGapOpen.get(), g_scoreGapExtend.get());
#if DOUBLE_AFFINE
SCORE s2 = GapPenalty(uLength, Term, g_scoreGapOpen2.get(), g_scoreGapExtend2.get());
if (s1 > s2)
return s1;
return s2;
#else
return s1;
#endif
}
static TLS<const MSA *> g_ptrMSA1;
static TLS<const MSA *> g_ptrMSA2;
static TLS<unsigned> g_uSeqIndex1;
static TLS<unsigned> g_uSeqIndex2;
static void LogGap(unsigned uStart, unsigned uEnd, unsigned uGapLength,
bool bNTerm, bool bCTerm)
{
Log("%16.16s ", "");
for (unsigned i = 0; i < uStart; ++i)
Log(" ");
unsigned uMyLength = 0;
for (unsigned i = uStart; i <= uEnd; ++i)
{
bool bGap1 = g_ptrMSA1.get()->IsGap(g_uSeqIndex1.get(), i);
bool bGap2 = g_ptrMSA2.get()->IsGap(g_uSeqIndex2.get(), i);
if (!bGap1 && !bGap2)
Quit("Error -- neither gapping");
if (bGap1 && bGap2)
Log(".");
else
{
++uMyLength;
Log("-");
}
}
SCORE s = GapPenalty(uGapLength, bNTerm || bCTerm);
Log(" L=%d N%d C%d s=%.3g", uGapLength, bNTerm, bCTerm, s);
Log("\n");
if (uMyLength != uGapLength)
Quit("Lengths differ");
}
static SCORE ScoreSeqPair(const MSA &msa1, unsigned uSeqIndex1,
const MSA &msa2, unsigned uSeqIndex2, SCORE *ptrLetters, SCORE *ptrGaps)
{
g_ptrMSA1.get() = &msa1;
g_ptrMSA2.get() = &msa2;
g_uSeqIndex1.get() = uSeqIndex1;
g_uSeqIndex2.get() = uSeqIndex2;
const unsigned uColCount = msa1.GetColCount();
const unsigned uColCount2 = msa2.GetColCount();
if (uColCount != uColCount2)
Quit("ScoreSeqPair, different lengths");
#if TRACE
Log("ScoreSeqPair\n");
Log("%16.16s ", msa1.GetSeqName(uSeqIndex1));
for (unsigned i = 0; i < uColCount; ++i)
Log("%c", msa1.GetChar(uSeqIndex1, i));
Log("\n");
Log("%16.16s ", msa2.GetSeqName(uSeqIndex2));
for (unsigned i = 0; i < uColCount; ++i)
Log("%c", msa1.GetChar(uSeqIndex2, i));
Log("\n");
//.........这里部分代码省略.........
开发者ID:Wyss,项目名称:mauve-py,代码行数:101,代码来源:objscoreda.cpp
示例7: SetCurrentAlignment
void SetCurrentAlignment(MSA &msa)
{
extern TLS<MSA *>ptrBestMSA;
ptrBestMSA.get() = &msa;
}
开发者ID:Wyss,项目名称:mauve-py,代码行数:5,代码来源:savebest.cpp
示例8: LogGap
static void LogGap(unsigned uStart, unsigned uEnd, unsigned uGapLength,
bool bNTerm, bool bCTerm)
{
Log("%16.16s ", "");
for (unsigned i = 0; i < uStart; ++i)
Log(" ");
unsigned uMyLength = 0;
for (unsigned i = uStart; i <= uEnd; ++i)
{
bool bGap1 = g_ptrMSA1.get()->IsGap(g_uSeqIndex1.get(), i);
bool bGap2 = g_ptrMSA2.get()->IsGap(g_uSeqIndex2.get(), i);
if (!bGap1 && !bGap2)
Quit("Error -- neither gapping");
if (bGap1 && bGap2)
Log(".");
else
{
++uMyLength;
Log("-");
}
}
SCORE s = GapPenalty(uGapLength, bNTerm || bCTerm);
Log(" L=%d N%d C%d s=%.3g", uGapLength, bNTerm, bCTerm, s);
Log("\n");
if (uMyLength != uGapLength)
Quit("Lengths differ");
}
开发者ID:Wyss,项目名称:mauve-py,代码行数:28,代码来源:objscoreda.cpp
示例9: TriangleSubscript
static inline unsigned TriangleSubscript(unsigned uIndex1, unsigned uIndex2)
{
#if DEBUG
if (uIndex1 >= g_uLeafCount.get() || uIndex2 >= g_uLeafCount.get())
Quit("TriangleSubscript(%u,%u) %u", uIndex1, uIndex2, g_uLeafCount.get());
#endif
unsigned v;
if (uIndex1 >= uIndex2)
v = uIndex2 + (uIndex1*(uIndex1 - 1))/2;
else
v = uIndex1 + (uIndex2*(uIndex2 - 1))/2;
assert(v < (g_uLeafCount.get()*(g_uLeafCount.get() - 1))/2);
return v;
}
开发者ID:Wyss,项目名称:mauve-py,代码行数:14,代码来源:upgma2.cpp
示例10: enableIndications
void Adapter::enableIndications(
CMPIIndicationMI* mi,
const CMPIContext* context)
{
TRACE;
_context_tls.set((void*)context);
Adapter* adapter = (Adapter*)mi->hdl;
Auto_RMutex auto_lock(adapter->_lock);
// Ignore request if indications already enabled.
if (adapter->_indications_enabled)
return;
adapter->_indications_enabled = true;
// Invoke the provider:
Enable_Indications_Status status = adapter->enable_indications(
_indication_proc, adapter);
switch (status)
{
case ENABLE_INDICATIONS_OK:
break;
case ENABLE_INDICATIONS_FAILED:
break;
}
}
开发者ID:LegalizeAdulthood,项目名称:cimple,代码行数:31,代码来源:Adapter.cpp
示例11: disableIndications
void Adapter::disableIndications(
CMPIIndicationMI* mi,
const CMPIContext* context)
{
TRACE;
_context_tls.set((void*)context);
Adapter* adapter = (Adapter*)mi->hdl;
Auto_RMutex auto_lock(adapter->_lock);
// Ignore if indications are not enabled.
if (!adapter->_indications_enabled)
return;
// Invoke the provider:
Disable_Indications_Status status = adapter->disable_indications();
switch (status)
{
case DISABLE_INDICATIONS_OK:
break;
case DISABLE_INDICATIONS_FAILED:
break;
}
adapter->_indications_enabled = false;
}
开发者ID:LegalizeAdulthood,项目名称:cimple,代码行数:30,代码来源:Adapter.cpp
示例12: associators
CMPIStatus Adapter::associators(
CMPIAssociationMI* mi,
const CMPIContext* context,
const CMPIResult* result,
const CMPIObjectPath* cmpi_op,
const char* assoc_class_,
const char* result_class_,
const char* role_,
const char* result_role_,
const char** properties)
{
TRACE;
const char* assoc_class = assoc_class_ ? assoc_class_ : "";
const char* result_class = result_class_ ? result_class_ : "";
const char* role = role_ ? role_ : "";
const char* result_role = result_role_ ? result_role_ : "";
_context_tls.set((void*)context);
Adapter* adapter = (Adapter*)mi->hdl;
Auto_RMutex auto_lock(adapter->_lock);
CIMPLE_ASSERT(strcasecmp(assoc_class, adapter->_mc->name) == 0);
// Lookup meta class for cmpi_op (not the same as the provider class).
const Meta_Class* mc = adapter->_find_meta_class(class_name(cmpi_op));
if (!mc)
CMReturn(CMPI_RC_ERR_INVALID_CLASS);
// Convert to CIMPLE reference:
Instance* cimple_ref = 0;
CMPIrc rc = make_cimple_reference(mc, cmpi_op, cimple_ref);
Destroyer<Instance> cimple_ref_d(cimple_ref);
if (rc != CMPI_RC_OK)
CMReturn(rc);
// Invoke the provider:
associators::Data data = { adapter->broker,
context, result, name_space(cmpi_op), properties, CMPI_RC_OK };
Enum_Associator_Names_Status status = adapter->enum_associator_names(
cimple_ref,
result_class,
role,
result_role,
associators::_proc,
&data);
CMReturn(CMPI_RC_OK);
}
开发者ID:LegalizeAdulthood,项目名称:cimple,代码行数:55,代码来源:Adapter.cpp
示例13: enumInstanceNames
CMPIStatus Adapter::enumInstanceNames(
CMPIInstanceMI* mi,
const CMPIContext* context,
const CMPIResult* result,
const CMPIObjectPath* cmpi_op)
{
TRACE;
_context_tls.set((void*)context);
Adapter* adapter = (Adapter*)mi->hdl;
Auto_RMutex auto_lock(adapter->_lock);
// Convert to CIMPLE reference:
const Meta_Class* mc = adapter->_mc;
Instance* cimple_ref = 0;
CMPIrc rc = make_cimple_reference(mc, cmpi_op, cimple_ref);
if (rc != CMPI_RC_OK)
CMReturn(rc);
Destroyer<Instance> cimple_ref_d(cimple_ref);
// Nullify non-key properties (this is a reference).
nullify_non_keys(cimple_ref);
// Invoke provider:
const char* ns = name_space(cmpi_op);
enum_instance_names::Data data =
{ adapter->broker, result, ns, CMPI_RC_OK };
Enum_Instances_Status status =
adapter->enum_instances(cimple_ref, enum_instance_names::_proc, &data);
switch (status)
{
case ENUM_INSTANCES_OK:
CMReturnDone(result);
CMReturn(CMPI_RC_OK);
case ENUM_INSTANCES_FAILED:
CMReturn(CMPI_RC_ERR_FAILED);
}
// Unreachable!
CMReturn(CMPI_RC_OK);
}
开发者ID:LegalizeAdulthood,项目名称:cimple,代码行数:51,代码来源:Adapter.cpp
示例14: enumInstances
CMPIStatus Adapter::enumInstances(
CMPIInstanceMI* mi,
const CMPIContext* context,
const CMPIResult* result,
const CMPIObjectPath* cmpi_op,
const char** properties)
{
TRACE;
_context_tls.set((void*)context);
Adapter* adapter = (Adapter*)mi->hdl;
Auto_RMutex auto_lock(adapter->_lock);
// Convert to CIMPLE reference:
const Meta_Class* mc = adapter->_mc;
Instance* cimple_ref = 0;
CMPIrc rc = make_cimple_reference(mc, cmpi_op, cimple_ref);
Destroyer<Instance> cimple_ref_d(cimple_ref);
if (rc != CMPI_RC_OK)
CMReturn(rc);
// Filter properties:
if (properties)
filter_properties(cimple_ref, properties);
// Invoke provider:
enum_instances::Data data =
{ adapter->broker, result, cmpi_op, properties, CMPI_RC_OK };
Enum_Instances_Status status =
adapter->enum_instances(cimple_ref, enum_instances::_proc, &data);
switch (status)
{
case ENUM_INSTANCES_OK:
break;
case ENUM_INSTANCES_FAILED:
CMReturn(CMPI_RC_ERR_FAILED);
}
CMReturnDone(result);
CMReturn(CMPI_RC_OK);
}
开发者ID:LegalizeAdulthood,项目名称:cimple,代码行数:50,代码来源:Adapter.cpp
示例15: modifyInstance
CMPIStatus Adapter::modifyInstance(
CMPIInstanceMI* mi,
const CMPIContext* context,
const CMPIResult* result,
const CMPIObjectPath* cmpi_op,
const CMPIInstance* cmpi_inst,
const char** properties)
{
TRACE;
_context_tls.set((void*)context);
Adapter* adapter = (Adapter*)mi->hdl;
Auto_RMutex auto_lock(adapter->_lock);
// Create CIMPLE instance:
const Meta_Class* mc = adapter->_mc;
Instance* cimple_inst = 0;
CMPIrc rc = make_cimple_instance(mc, cmpi_inst, cimple_inst);
if (rc != CMPI_RC_OK)
CMReturn(rc);
Destroyer<Instance> cmpi_inst_d(cimple_inst);
// Invoke the provider:
Modify_Instance_Status status =
adapter->modify_instance(cimple_inst);
switch (status)
{
case MODIFY_INSTANCE_OK:
CMReturnObjectPath(result, cmpi_op);
CMReturnDone(result);
CMReturn(CMPI_RC_OK);
case MODIFY_INSTANCE_NOT_FOUND:
CMReturn(CMPI_RC_ERR_NOT_FOUND);
case MODIFY_INSTANCE_UNSUPPORTED:
CMReturn(CMPI_RC_ERR_NOT_SUPPORTED);
}
CMReturn(CMPI_RC_OK);
}
开发者ID:LegalizeAdulthood,项目名称:cimple,代码行数:47,代码来源:Adapter.cpp
示例16: _timer_thread_proc
void* Adapter::_timer_thread_proc(void* arg)
{
TRACE;
Adapter* adapter = (Adapter*)arg;
CBAttachThread(adapter->broker, adapter->_timer_context);
_context_tls.set((void*)adapter->_timer_context);
// ATTN: there is currently no logic to stop this thread.
while (!adapter->_stop_timer_thread)
adapter->_sched->dispatch();
CBDetachThread(adapter->broker, adapter->_timer_context);
return 0;
}
开发者ID:LegalizeAdulthood,项目名称:cimple,代码行数:18,代码来源:Adapter.cpp
示例17: deleteInstance
CMPIStatus Adapter::deleteInstance(
CMPIInstanceMI* mi,
const CMPIContext* context,
const CMPIResult* result,
const CMPIObjectPath* cmpi_op)
{
TRACE;
_context_tls.set((void*)context);
Adapter* adapter = (Adapter*)mi->hdl;
Auto_RMutex auto_lock(adapter->_lock);
// Convert to CIMPLE reference:
const Meta_Class* mc = adapter->_mc;
Instance* cimple_ref = 0;
CMPIrc rc = make_cimple_reference(mc, cmpi_op, cimple_ref);
Destroyer<Instance> cimple_ref_d(cimple_ref);
if (rc != CMPI_RC_OK)
CMReturn(rc);
// Invoke provider:
Delete_Instance_Status status =
adapter->delete_instance(cimple_ref);
switch (status)
{
case DELETE_INSTANCE_OK:
break;
case DELETE_INSTANCE_NOT_FOUND:
CMReturn(CMPI_RC_ERR_NOT_FOUND);
case DELETE_INSTANCE_UNSUPPORTED:
CMReturn(CMPI_RC_ERR_NOT_SUPPORTED);
}
CMReturnDone(result);
CMReturn(CMPI_RC_OK);
}
开发者ID:LegalizeAdulthood,项目名称:cimple,代码行数:44,代码来源:Adapter.cpp
示例18: _indication_proc
static bool _indication_proc(Instance* cimple_inst, void* client_data)
{
TRACE;
// This function is called by the CIMPLE Indication_Handler<> in order to
// deliver a single indication.
Adapter* adapter = (Adapter*)client_data;
// If this is the final call, just return.
if (cimple_inst == 0)
return false;
// Convert CIMPLE instance to CMPI instance:
CMPIInstance* cmpi_inst = 0;
CMPIrc rc = make_cmpi_instance(adapter->broker,
cimple_inst, _INDICATIONS_NAMESPACE, 0, cmpi_inst);
// Deliver the indication (we cannot do anything about failures).
if (rc == CMPI_RC_OK)
{
// Grab the CMPI context from thread-specific-data.
const CMPIContext* context = (const CMPIContext*)_context_tls.get();
// Deliver the indication:
CBDeliverIndication(
adapter->broker, context, _INDICATIONS_NAMESPACE, cmpi_inst);
}
// Keep them coming!
return true;
}
开发者ID:LegalizeAdulthood,项目名称:cimple,代码行数:38,代码来源:Adapter.cpp
示例19: ListState
static void ListState()
{
Log("Dist matrix\n");
Log(" ");
for (unsigned i = 0; i < g_uLeafCount.get(); ++i)
{
if (uInsane == g_uNodeIndex.get()[i])
continue;
Log(" %5u", g_uNodeIndex.get()[i]);
}
Log("\n");
for (unsigned i = 0; i < g_uLeafCount.get(); ++i)
{
if (uInsane == g_uNodeIndex.get()[i])
continue;
Log("%5u ", g_uNodeIndex.get()[i]);
for (unsigned j = 0; j < g_uLeafCount.get(); ++j)
{
if (uInsane == g_uNodeIndex.get()[j])
continue;
if (i == j)
Log(" ");
else
{
unsigned v = TriangleSubscript(i, j);
Log("%5.2g ", g_Dist.get()[v]);
}
}
Log("\n");
}
Log("\n");
Log(" i Node NrNb Dist\n");
Log("----- ----- ----- --------\n");
for (unsigned i = 0; i < g_uLeafCount.get(); ++i)
{
if (uInsane == g_uNodeIndex.get()[i])
continue;
Log("%5u %5u %5u %8.3f\n",
i,
g_uNodeIndex.get()[i],
g_uNearestNeighbor.get()[i],
g_MinDist.get()[i]);
}
Log("\n");
Log(" Node L R Height LLength RLength\n");
Log("----- ----- ----- ------ ------- -------\n");
for (unsigned i = 0; i <= g_uInternalNodeIndex.get(); ++i)
Log("%5u %5u %5u %6.2g %6.2g %6.2g\n",
i,
g_uLeft.get()[i],
g_uRight.get()[i],
g_Height.get()[i],
g_LeftLength.get()[i],
g_RightLength.get()[i]);
}
开发者ID:Wyss,项目名称:mauve-py,代码行数:58,代码来源:upgma2.cpp
示例20: UPGMA2
void UPGMA2(const DistCalc &DC, Tree &tree, LINKAGE Linkage)
{
g_uLeafCount.get() = DC.GetCount();
g_uTriangleSize.get() = (g_uLeafCount.get()*(g_uLeafCount.get() - 1))/2;
g_uInternalNodeCount.get() = g_uLeafCount.get() - 1;
g_Dist.get() = new dist_t[g_uTriangleSize.get()];
g_uNodeIndex.get() = new unsigned[g_uLeafCount.get()];
g_uNearestNeighbor.get() = new unsigned[g_uLeafCount.get()];
g_MinDist.get() = new dist_t[g_uLeafCount.get()];
unsigned *Ids = new unsigned [g_uLeafCount.get()];
char **Names = new char *[g_uLeafCount.get()];
g_uLeft.get() = new unsigned[g_uInternalNodeCount.get()];
g_uRight.get() = new unsigned[g_uInternalNodeCount.get()];
g_Height.get() = new dist_t[g_uInternalNodeCount.get()];
g_LeftLength.get() = new dist_t[g_uInternalNodeCount.get()];
g_RightLength.get() = new dist_t[g_uInternalNodeCount.get()];
for (unsigned i = 0; i < g_uLeafCount.get(); ++i)
{
g_MinDist.get()[i] = BIG_DIST;
g_uNodeIndex.get()[i] = i;
g_uNearestNeighbor.get()[i] = uInsane;
Ids[i] = DC.GetId(i);
Names[i] = strsave(DC.GetName(i));
}
for (unsigned i = 0; i < g_uInternalNodeCount.get(); ++i)
{
g_uLeft.get()[i] = uInsane;
g_uRight.get()[i] = uInsane;
g_LeftLength.get()[i] = BIG_DIST;
g_RightLength.get()[i] = BIG_DIST;
g_Height.get()[i] = BIG_DIST;
}
// Compute initial NxN triangular distance matrix.
// Store minimum distance for each full (not triangular) row.
// Loop from 1, not 0, because "row" is 0, 1 ... i-1,
// so nothing to do when i=0.
for (unsigned i = 1; i < g_uLeafCount.get(); ++i)
{
dist_t *Row = g_Dist.get() + TriangleSubscript(i, 0);
DC.CalcDistRange(i, Row);
for (unsigned j = 0; j < i; ++j)
{
const dist_t d = Row[j];
if (d < g_MinDist.get()[i])
{
g_MinDist.get()[i] = d;
g_uNearestNeighbor.get()[i] = j;
}
if (d < g_MinDist.get()[j])
{
g_MinDist.get()[j] = d;
g_uNearestNeighbor.get()[j] = i;
}
}
}
#if TRACE
Log("Initial state:\n");
ListState();
#endif
for (g_uInternalNodeIndex.get() = 0; g_uInternalNodeIndex.get() < g_uLeafCount.get() - 1;
++g_uInternalNodeIndex.get())
{
#if TRACE
Log("\n");
Log("Internal node index %5u\n", g_uInternalNodeIndex.get());
Log("-------------------------\n");
#endif
// Find nearest neighbors
unsigned Lmin = uInsane;
unsigned Rmin = uInsane;
dist_t dtMinDist = BIG_DIST;
for (unsigned j = 0; j < g_uLeafCount.get(); ++j)
{
if (uInsane == g_uNodeIndex.get()[j])
continue;
dist_t d = g_MinDist.get()[j];
if (d < dtMinDist)
{
dtMinDist = d;
Lmin = j;
Rmin = g_uNearestNeighbor.get()[j];
assert(uInsane != Rmin);
assert(uInsane != g_uNodeIndex.get()[Rmin]);
}
}
assert(Lmin != uInsane);
assert(Rmin != uInsane);
assert(dtMinDist != BIG_DIST);
//.........这里部分代码省略.........
开发者ID:Wyss,项目名称:mauve-py,代码行数:101,代码来源:upgma2.cpp
注:本文中的TLS类示例由纯净天空整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 |
请发表评论