aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/linden/indra/llcharacter
diff options
context:
space:
mode:
authorJacek Antonelli2008-08-15 23:44:50 -0500
committerJacek Antonelli2008-08-15 23:44:50 -0500
commit89fe5dab825a62a0e3fd8d248cbc91c65eb2a426 (patch)
treebcff14b7888d04a2fec799c59369f6095224bd08 /linden/indra/llcharacter
parentSecond Life viewer sources 1.13.3.2 (diff)
downloadmeta-impy-89fe5dab825a62a0e3fd8d248cbc91c65eb2a426.zip
meta-impy-89fe5dab825a62a0e3fd8d248cbc91c65eb2a426.tar.gz
meta-impy-89fe5dab825a62a0e3fd8d248cbc91c65eb2a426.tar.bz2
meta-impy-89fe5dab825a62a0e3fd8d248cbc91c65eb2a426.tar.xz
Second Life viewer sources 1.14.0.0
Diffstat (limited to 'linden/indra/llcharacter')
-rw-r--r--linden/indra/llcharacter/llbvhloader.cpp38
-rw-r--r--linden/indra/llcharacter/llcharacter.cpp28
-rw-r--r--linden/indra/llcharacter/llcharacter.h5
-rw-r--r--linden/indra/llcharacter/llcharacter_vc8.vcproj416
-rw-r--r--linden/indra/llcharacter/lljoint.cpp87
-rw-r--r--linden/indra/llcharacter/lljoint.h3
-rw-r--r--linden/indra/llcharacter/llkeyframemotion.cpp34
-rw-r--r--linden/indra/llcharacter/llkeyframemotionparam.cpp8
8 files changed, 533 insertions, 86 deletions
diff --git a/linden/indra/llcharacter/llbvhloader.cpp b/linden/indra/llcharacter/llbvhloader.cpp
index 6aa430f..48b5e7c 100644
--- a/linden/indra/llcharacter/llbvhloader.cpp
+++ b/linden/indra/llcharacter/llbvhloader.cpp
@@ -175,8 +175,8 @@ LLBVHLoader::Status LLBVHLoader::loadTranslationTable(const char *fileName)
175 //-------------------------------------------------------------------- 175 //--------------------------------------------------------------------
176 char path[LL_MAX_PATH]; /* Flawfinder: ignore */ 176 char path[LL_MAX_PATH]; /* Flawfinder: ignore */
177 177
178 snprintf( path, sizeof(path), "%s", 178 snprintf( path, sizeof(path), "%s",/* Flawfinder: ignore */
179 gDirUtilp->getExpandedFilename(LL_PATH_APP_SETTINGS,fileName).c_str()); /* Flawfinder: ignore */ 179 gDirUtilp->getExpandedFilename(LL_PATH_APP_SETTINGS,fileName).c_str());
180 180
181 181
182 apr_file_t *fp = ll_apr_file_open(path, LL_APR_R); 182 apr_file_t *fp = ll_apr_file_open(path, LL_APR_R);
@@ -209,7 +209,7 @@ LLBVHLoader::Status LLBVHLoader::loadTranslationTable(const char *fileName)
209 // check the 1st token on the line to determine if it's empty or a comment 209 // check the 1st token on the line to determine if it's empty or a comment
210 //---------------------------------------------------------------- 210 //----------------------------------------------------------------
211 char token[128]; /* Flawfinder: ignore */ 211 char token[128]; /* Flawfinder: ignore */
212 if ( sscanf(mLine, " %127s", token) != 1 ) 212 if ( sscanf(mLine, " %127s", token) != 1 ) /* Flawfinder: ignore */
213 continue; 213 continue;
214 214
215 if (token[0] == '#') 215 if (token[0] == '#')
@@ -244,7 +244,7 @@ LLBVHLoader::Status LLBVHLoader::loadTranslationTable(const char *fileName)
244 if (loadingGlobals && LLString::compareInsensitive(token, "emote")==0) 244 if (loadingGlobals && LLString::compareInsensitive(token, "emote")==0)
245 { 245 {
246 char emote_str[1024]; /* Flawfinder: ignore */ 246 char emote_str[1024]; /* Flawfinder: ignore */
247 if ( sscanf(mLine, " %*s = %1023s", emote_str) != 1 ) 247 if ( sscanf(mLine, " %*s = %1023s", emote_str) != 1 ) /* Flawfinder: ignore */
248 return ST_NO_XLT_EMOTE; 248 return ST_NO_XLT_EMOTE;
249 249
250 mEmoteName.assign( emote_str ); 250 mEmoteName.assign( emote_str );
@@ -282,7 +282,7 @@ LLBVHLoader::Status LLBVHLoader::loadTranslationTable(const char *fileName)
282 { 282 {
283 mLoop = TRUE; 283 mLoop = TRUE;
284 } 284 }
285 else if ( sscanf(mLine, " %*s = %127s", trueFalse) == 1 ) 285 else if ( sscanf(mLine, " %*s = %127s", trueFalse) == 1 ) /* Flawfinder: ignore */
286 { 286 {
287 mLoop = (LLString::compareInsensitive(trueFalse, "true")==0); 287 mLoop = (LLString::compareInsensitive(trueFalse, "true")==0);
288 } 288 }
@@ -304,7 +304,7 @@ LLBVHLoader::Status LLBVHLoader::loadTranslationTable(const char *fileName)
304 { 304 {
305 F32 duration; 305 F32 duration;
306 char type[128]; /* Flawfinder: ignore */ 306 char type[128]; /* Flawfinder: ignore */
307 if ( sscanf(mLine, " %*s = %f %127s", &duration, type) != 2 ) 307 if ( sscanf(mLine, " %*s = %f %127s", &duration, type) != 2 ) /* Flawfinder: ignore */
308 return ST_NO_XLT_EASEIN; 308 return ST_NO_XLT_EASEIN;
309 309
310 mEaseIn = duration; 310 mEaseIn = duration;
@@ -317,8 +317,8 @@ LLBVHLoader::Status LLBVHLoader::loadTranslationTable(const char *fileName)
317 if (loadingGlobals && LLString::compareInsensitive(token, "easeout")==0) 317 if (loadingGlobals && LLString::compareInsensitive(token, "easeout")==0)
318 { 318 {
319 F32 duration; 319 F32 duration;
320 char type[128]; 320 char type[128]; /* Flawfinder: ignore */
321 if ( sscanf(mLine, " %*s = %f %127s", &duration, type) != 2 ) 321 if ( sscanf(mLine, " %*s = %f %127s", &duration, type) != 2 ) /* Flawfinder: ignore */
322 return ST_NO_XLT_EASEOUT; 322 return ST_NO_XLT_EASEOUT;
323 323
324 mEaseOut = duration; 324 mEaseOut = duration;
@@ -343,7 +343,7 @@ LLBVHLoader::Status LLBVHLoader::loadTranslationTable(const char *fileName)
343 Constraint constraint; 343 Constraint constraint;
344 344
345 // try reading optional target direction 345 // try reading optional target direction
346 if(sscanf( 346 if(sscanf( /* Flawfinder: ignore */
347 mLine, 347 mLine,
348 " %*s = %d %f %f %f %f %15s %f %f %f %15s %f %f %f %f %f %f", 348 " %*s = %d %f %f %f %f %15s %f %f %f %15s %f %f %f %f %f %f",
349 &constraint.mChainLength, 349 &constraint.mChainLength,
@@ -363,7 +363,7 @@ LLBVHLoader::Status LLBVHLoader::loadTranslationTable(const char *fileName)
363 &constraint.mTargetDir.mV[VY], 363 &constraint.mTargetDir.mV[VY],
364 &constraint.mTargetDir.mV[VZ]) != 16) 364 &constraint.mTargetDir.mV[VZ]) != 16)
365 { 365 {
366 if(sscanf( 366 if(sscanf( /* Flawfinder: ignore */
367 mLine, 367 mLine,
368 " %*s = %d %f %f %f %f %15s %f %f %f %15s %f %f %f", 368 " %*s = %d %f %f %f %f %15s %f %f %f %15s %f %f %f",
369 &constraint.mChainLength, 369 &constraint.mChainLength,
@@ -403,7 +403,7 @@ LLBVHLoader::Status LLBVHLoader::loadTranslationTable(const char *fileName)
403 Constraint constraint; 403 Constraint constraint;
404 404
405 // try reading optional target direction 405 // try reading optional target direction
406 if(sscanf( 406 if(sscanf( /* Flawfinder: ignore */
407 mLine, 407 mLine,
408 " %*s = %d %f %f %f %f %15s %f %f %f %15s %f %f %f %f %f %f", 408 " %*s = %d %f %f %f %f %15s %f %f %f %15s %f %f %f %f %f %f",
409 &constraint.mChainLength, 409 &constraint.mChainLength,
@@ -423,7 +423,7 @@ LLBVHLoader::Status LLBVHLoader::loadTranslationTable(const char *fileName)
423 &constraint.mTargetDir.mV[VY], 423 &constraint.mTargetDir.mV[VY],
424 &constraint.mTargetDir.mV[VZ]) != 16) 424 &constraint.mTargetDir.mV[VZ]) != 16)
425 { 425 {
426 if(sscanf( 426 if(sscanf( /* Flawfinder: ignore */
427 mLine, 427 mLine,
428 " %*s = %d %f %f %f %f %15s %f %f %f %15s %f %f %f", 428 " %*s = %d %f %f %f %f %15s %f %f %f %15s %f %f %f",
429 &constraint.mChainLength, 429 &constraint.mChainLength,
@@ -471,7 +471,7 @@ LLBVHLoader::Status LLBVHLoader::loadTranslationTable(const char *fileName)
471 if ( LLString::compareInsensitive(token, "ignore")==0 ) 471 if ( LLString::compareInsensitive(token, "ignore")==0 )
472 { 472 {
473 char trueFalse[128]; /* Flawfinder: ignore */ 473 char trueFalse[128]; /* Flawfinder: ignore */
474 if ( sscanf(mLine, " %*s = %127s", trueFalse) != 1 ) 474 if ( sscanf(mLine, " %*s = %127s", trueFalse) != 1 ) /* Flawfinder: ignore */
475 return ST_NO_XLT_IGNORE; 475 return ST_NO_XLT_IGNORE;
476 476
477 trans->mIgnore = (LLString::compareInsensitive(trueFalse, "true")==0); 477 trans->mIgnore = (LLString::compareInsensitive(trueFalse, "true")==0);
@@ -489,7 +489,7 @@ LLBVHLoader::Status LLBVHLoader::loadTranslationTable(const char *fileName)
489 { 489 {
490 trans->mRelativePosition.setVec( x, y, z ); 490 trans->mRelativePosition.setVec( x, y, z );
491 } 491 }
492 else if ( sscanf(mLine, " %*s = %127s", relpos) == 1 ) 492 else if ( sscanf(mLine, " %*s = %127s", relpos) == 1 ) /* Flawfinder: ignore */
493 { 493 {
494 if ( LLString::compareInsensitive(relpos, "firstkey")==0 ) 494 if ( LLString::compareInsensitive(relpos, "firstkey")==0 )
495 { 495 {
@@ -515,7 +515,7 @@ LLBVHLoader::Status LLBVHLoader::loadTranslationTable(const char *fileName)
515 { 515 {
516 //F32 x, y, z; 516 //F32 x, y, z;
517 char relpos[128]; /* Flawfinder: ignore */ 517 char relpos[128]; /* Flawfinder: ignore */
518 if ( sscanf(mLine, " %*s = %127s", relpos) == 1 ) 518 if ( sscanf(mLine, " %*s = %127s", relpos) == 1 ) /* Flawfinder: ignore */
519 { 519 {
520 if ( LLString::compareInsensitive(relpos, "firstkey")==0 ) 520 if ( LLString::compareInsensitive(relpos, "firstkey")==0 )
521 { 521 {
@@ -540,7 +540,7 @@ LLBVHLoader::Status LLBVHLoader::loadTranslationTable(const char *fileName)
540 if ( LLString::compareInsensitive(token, "outname")==0 ) 540 if ( LLString::compareInsensitive(token, "outname")==0 )
541 { 541 {
542 char outName[128]; /* Flawfinder: ignore */ 542 char outName[128]; /* Flawfinder: ignore */
543 if ( sscanf(mLine, " %*s = %127s", outName) != 1 ) 543 if ( sscanf(mLine, " %*s = %127s", outName) != 1 ) /* Flawfinder: ignore */
544 return ST_NO_XLT_OUTNAME; 544 return ST_NO_XLT_OUTNAME;
545 545
546 trans->mOutName = outName; 546 trans->mOutName = outName;
@@ -585,7 +585,7 @@ LLBVHLoader::Status LLBVHLoader::loadTranslationTable(const char *fileName)
585 if ( LLString::compareInsensitive(token, "mergeparent")==0 ) 585 if ( LLString::compareInsensitive(token, "mergeparent")==0 )
586 { 586 {
587 char mergeParentName[128]; /* Flawfinder: ignore */ 587 char mergeParentName[128]; /* Flawfinder: ignore */
588 if ( sscanf(mLine, " %*s = %127s", mergeParentName) != 1 ) 588 if ( sscanf(mLine, " %*s = %127s", mergeParentName) != 1 ) /* Flawfinder: ignore */
589 return ST_NO_XLT_MERGEPARENT; 589 return ST_NO_XLT_MERGEPARENT;
590 590
591 trans->mMergeParentName = mergeParentName; 591 trans->mMergeParentName = mergeParentName;
@@ -598,7 +598,7 @@ LLBVHLoader::Status LLBVHLoader::loadTranslationTable(const char *fileName)
598 if ( LLString::compareInsensitive(token, "mergechild")==0 ) 598 if ( LLString::compareInsensitive(token, "mergechild")==0 )
599 { 599 {
600 char mergeChildName[128]; /* Flawfinder: ignore */ 600 char mergeChildName[128]; /* Flawfinder: ignore */
601 if ( sscanf(mLine, " %*s = %127s", mergeChildName) != 1 ) 601 if ( sscanf(mLine, " %*s = %127s", mergeChildName) != 1 ) /* Flawfinder: ignore */
602 return ST_NO_XLT_MERGECHILD; 602 return ST_NO_XLT_MERGECHILD;
603 603
604 trans->mMergeChildName = mergeChildName; 604 trans->mMergeChildName = mergeChildName;
@@ -724,7 +724,7 @@ LLBVHLoader::Status LLBVHLoader::loadBVHFile(const char *buffer, char* error_tex
724 // get the joint name 724 // get the joint name
725 //---------------------------------------------------------------- 725 //----------------------------------------------------------------
726 char jointName[80]; /* Flawfinder: ignore */ 726 char jointName[80]; /* Flawfinder: ignore */
727 if ( sscanf(line.c_str(), "%*s %79s", jointName) != 1 ) 727 if ( sscanf(line.c_str(), "%*s %79s", jointName) != 1 ) /* Flawfinder: ignore */
728 { 728 {
729 strncpy(error_text, line.c_str(), 127); /* Flawfinder: ignore */ 729 strncpy(error_text, line.c_str(), 127); /* Flawfinder: ignore */
730 return ST_NO_NAME; 730 return ST_NO_NAME;
diff --git a/linden/indra/llcharacter/llcharacter.cpp b/linden/indra/llcharacter/llcharacter.cpp
index 45f692c..6e9327f 100644
--- a/linden/indra/llcharacter/llcharacter.cpp
+++ b/linden/indra/llcharacter/llcharacter.cpp
@@ -38,13 +38,7 @@
38 38
39LLStringTable LLCharacter::sVisualParamNames(1024); 39LLStringTable LLCharacter::sVisualParamNames(1024);
40 40
41// helper functions 41std::vector< LLCharacter* > LLCharacter::sInstances;
42BOOL larger_screen_area( LLCharacter* data_new, LLCharacter* data_tested )
43{
44 return data_new->getPixelArea() > data_tested->getPixelArea();
45}
46
47LLLinkedList< LLCharacter > LLCharacter::sInstances( larger_screen_area );
48 42
49 43
50//----------------------------------------------------------------------------- 44//-----------------------------------------------------------------------------
@@ -59,7 +53,7 @@ LLCharacter::LLCharacter()
59 mSkeletonSerialNum( 0 ) 53 mSkeletonSerialNum( 0 )
60{ 54{
61 mMotionController.setCharacter( this ); 55 mMotionController.setCharacter( this );
62 sInstances.addData(this); 56 sInstances.push_back(this);
63 mPauseRequest = new LLPauseRequestHandle(); 57 mPauseRequest = new LLPauseRequestHandle();
64} 58}
65 59
@@ -76,7 +70,11 @@ LLCharacter::~LLCharacter()
76 { 70 {
77 delete param; 71 delete param;
78 } 72 }
79 sInstances.removeData(this); 73 std::vector<LLCharacter*>::iterator iter = std::find(sInstances.begin(), sInstances.end(), this);
74 if (iter != sInstances.end())
75 {
76 sInstances.erase(iter);
77 }
80} 78}
81 79
82 80
@@ -85,7 +83,7 @@ LLCharacter::~LLCharacter()
85//----------------------------------------------------------------------------- 83//-----------------------------------------------------------------------------
86LLJoint *LLCharacter::getJoint( const std::string &name ) 84LLJoint *LLCharacter::getJoint( const std::string &name )
87{ 85{
88 LLJoint *joint = NULL; 86 LLJoint* joint = NULL;
89 87
90 LLJoint *root = getRootJoint(); 88 LLJoint *root = getRootJoint();
91 if (root) 89 if (root)
@@ -202,7 +200,7 @@ void LLCharacter::flushAllMotions()
202//----------------------------------------------------------------------------- 200//-----------------------------------------------------------------------------
203// dumpCharacter() 201// dumpCharacter()
204//----------------------------------------------------------------------------- 202//-----------------------------------------------------------------------------
205void LLCharacter::dumpCharacter( LLJoint *joint ) 203void LLCharacter::dumpCharacter( LLJoint* joint )
206{ 204{
207 // handle top level entry into recursion 205 // handle top level entry into recursion
208 if (joint == NULL) 206 if (joint == NULL)
@@ -217,11 +215,11 @@ void LLCharacter::dumpCharacter( LLJoint *joint )
217 llinfos << "DEBUG: " << joint->getName() << " (" << (joint->getParent()?joint->getParent()->getName():std::string("ROOT")) << ")" << llendl; 215 llinfos << "DEBUG: " << joint->getName() << " (" << (joint->getParent()?joint->getParent()->getName():std::string("ROOT")) << ")" << llendl;
218 216
219 // recurse 217 // recurse
220 for ( LLJoint *j = joint->mChildren.getFirstData(); 218 for (LLJoint::child_list_t::iterator iter = joint->mChildren.begin();
221 j != NULL; 219 iter != joint->mChildren.end(); ++iter)
222 j = joint->mChildren.getNextData() )
223 { 220 {
224 dumpCharacter(j); 221 LLJoint* child_joint = *iter;
222 dumpCharacter(child_joint);
225 } 223 }
226} 224}
227 225
diff --git a/linden/indra/llcharacter/llcharacter.h b/linden/indra/llcharacter/llcharacter.h
index bfe3ffa..6f4fe17 100644
--- a/linden/indra/llcharacter/llcharacter.h
+++ b/linden/indra/llcharacter/llcharacter.h
@@ -40,6 +40,7 @@
40#include "linked_lists.h" 40#include "linked_lists.h"
41#include "string_table.h" 41#include "string_table.h"
42#include "llmemory.h" 42#include "llmemory.h"
43#include "llthread.h"
43 44
44class LLPolyMesh; 45class LLPolyMesh;
45 46
@@ -109,7 +110,7 @@ public:
109 virtual F32 getTimeDilation() = 0; 110 virtual F32 getTimeDilation() = 0;
110 111
111 // gets current pixel area of this character 112 // gets current pixel area of this character
112 virtual F32 getPixelArea() = 0; 113 virtual F32 getPixelArea() const = 0;
113 114
114 // gets the head mesh of the character 115 // gets the head mesh of the character
115 virtual LLPolyMesh* getHeadMesh() = 0; 116 virtual LLPolyMesh* getHeadMesh() = 0;
@@ -242,7 +243,7 @@ public:
242 U32 getSkeletonSerialNum() const { return mSkeletonSerialNum; } 243 U32 getSkeletonSerialNum() const { return mSkeletonSerialNum; }
243 void setSkeletonSerialNum( U32 num ) { mSkeletonSerialNum = num; } 244 void setSkeletonSerialNum( U32 num ) { mSkeletonSerialNum = num; }
244 245
245 static LLLinkedList< LLCharacter > sInstances; 246 static std::vector< LLCharacter* > sInstances;
246 247
247protected: 248protected:
248 LLMotionController mMotionController; 249 LLMotionController mMotionController;
diff --git a/linden/indra/llcharacter/llcharacter_vc8.vcproj b/linden/indra/llcharacter/llcharacter_vc8.vcproj
new file mode 100644
index 0000000..415b74f
--- /dev/null
+++ b/linden/indra/llcharacter/llcharacter_vc8.vcproj
@@ -0,0 +1,416 @@
1<?xml version="1.0" encoding="Windows-1252"?>
2<VisualStudioProject
3 ProjectType="Visual C++"
4 Version="8.00"
5 Name="llcharacter"
6 ProjectGUID="{5EA5DDF0-C7E1-4F49-BEF5-9246A4656B2E}"
7 Keyword="Win32Proj"
8 >
9 <Platforms>
10 <Platform
11 Name="Win32"
12 />
13 </Platforms>
14 <ToolFiles>
15 </ToolFiles>
16 <Configurations>
17 <Configuration
18 Name="Debug|Win32"
19 OutputDirectory="../lib_$(ConfigurationName)/i686-win32"
20 IntermediateDirectory="Debug"
21 ConfigurationType="4"
22 InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
23 CharacterSet="1"
24 >
25 <Tool
26 Name="VCPreBuildEventTool"
27 />
28 <Tool
29 Name="VCCustomBuildTool"
30 />
31 <Tool
32 Name="VCXMLDataGeneratorTool"
33 />
34 <Tool
35 Name="VCWebServiceProxyGeneratorTool"
36 />
37 <Tool
38 Name="VCMIDLTool"
39 />
40 <Tool
41 Name="VCCLCompilerTool"
42 Optimization="0"
43 AdditionalIncludeDirectories="..\llcommon;..\llmath;..\llvfs;..\llmessage;..\llxml;..\..\libraries\i686-win32\include;..\..\libraries\include\"
44 PreprocessorDefinitions="WIN32;_DEBUG;_LIB;LL_WINDOWS;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;_USE_32BIT_TIME_T;LL_DEBUG"
45 MinimalRebuild="true"
46 BasicRuntimeChecks="3"
47 RuntimeLibrary="1"
48 StructMemberAlignment="4"
49 TreatWChar_tAsBuiltInType="false"
50 ForceConformanceInForLoopScope="true"
51 UsePrecompiledHeader="0"
52 WarningLevel="3"
53 WarnAsError="true"
54 Detect64BitPortabilityProblems="false"
55 DebugInformationFormat="4"
56 />
57 <Tool
58 Name="VCManagedResourceCompilerTool"
59 />
60 <Tool
61 Name="VCResourceCompilerTool"
62 />
63 <Tool
64 Name="VCPreLinkEventTool"
65 />
66 <Tool
67 Name="VCLibrarianTool"
68 OutputFile="$(OutDir)/llcharacter.lib"
69 />
70 <Tool
71 Name="VCALinkTool"
72 />
73 <Tool
74 Name="VCXDCMakeTool"
75 />
76 <Tool
77 Name="VCBscMakeTool"
78 />
79 <Tool
80 Name="VCFxCopTool"
81 />
82 <Tool
83 Name="VCPostBuildEventTool"
84 />
85 </Configuration>
86 <Configuration
87 Name="Release|Win32"
88 OutputDirectory="../lib_$(ConfigurationName)/i686-win32"
89 IntermediateDirectory="Release"
90 ConfigurationType="4"
91 InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
92 CharacterSet="1"
93 >
94 <Tool
95 Name="VCPreBuildEventTool"
96 />
97 <Tool
98 Name="VCCustomBuildTool"
99 />
100 <Tool
101 Name="VCXMLDataGeneratorTool"
102 />
103 <Tool
104 Name="VCWebServiceProxyGeneratorTool"
105 />
106 <Tool
107 Name="VCMIDLTool"
108 />
109 <Tool
110 Name="VCCLCompilerTool"
111 AdditionalIncludeDirectories="..\llcommon;..\llmath;..\llvfs;..\llmessage;..\llxml;..\..\libraries\i686-win32\include;..\..\libraries\include\"
112 PreprocessorDefinitions="WIN32;NDEBUG;_LIB;LL_WINDOWS;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;_USE_32BIT_TIME_T;LL_RELEASE"
113 RuntimeLibrary="0"
114 StructMemberAlignment="0"
115 TreatWChar_tAsBuiltInType="false"
116 ForceConformanceInForLoopScope="true"
117 UsePrecompiledHeader="0"
118 WarningLevel="3"
119 WarnAsError="true"
120 Detect64BitPortabilityProblems="false"
121 DebugInformationFormat="3"
122 />
123 <Tool
124 Name="VCManagedResourceCompilerTool"
125 />
126 <Tool
127 Name="VCResourceCompilerTool"
128 />
129 <Tool
130 Name="VCPreLinkEventTool"
131 />
132 <Tool
133 Name="VCLibrarianTool"
134 OutputFile="$(OutDir)/llcharacter.lib"
135 />
136 <Tool
137 Name="VCALinkTool"
138 />
139 <Tool
140 Name="VCXDCMakeTool"
141 />
142 <Tool
143 Name="VCBscMakeTool"
144 />
145 <Tool
146 Name="VCFxCopTool"
147 />
148 <Tool
149 Name="VCPostBuildEventTool"
150 />
151 </Configuration>
152 <Configuration
153 Name="ReleaseNoOpt|Win32"
154 OutputDirectory="../lib_$(ConfigurationName)/i686-win32"
155 IntermediateDirectory="$(ConfigurationName)"
156 ConfigurationType="4"
157 InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
158 CharacterSet="1"
159 >
160 <Tool
161 Name="VCPreBuildEventTool"
162 />
163 <Tool
164 Name="VCCustomBuildTool"
165 />
166 <Tool
167 Name="VCXMLDataGeneratorTool"
168 />
169 <Tool
170 Name="VCWebServiceProxyGeneratorTool"
171 />
172 <Tool
173 Name="VCMIDLTool"
174 />
175 <Tool
176 Name="VCCLCompilerTool"
177 Optimization="0"
178 AdditionalIncludeDirectories="..\llcommon;..\llmath;..\llvfs;..\llmessage;..\llxml;..\..\libraries\i686-win32\include;..\..\libraries\include\"
179 PreprocessorDefinitions="WIN32;NDEBUG;_LIB;LL_WINDOWS;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;_USE_32BIT_TIME_T;LL_RELEASE"
180 RuntimeLibrary="0"
181 StructMemberAlignment="0"
182 TreatWChar_tAsBuiltInType="false"
183 ForceConformanceInForLoopScope="true"
184 UsePrecompiledHeader="0"
185 WarningLevel="3"
186 WarnAsError="true"
187 Detect64BitPortabilityProblems="false"
188 DebugInformationFormat="3"
189 />
190 <Tool
191 Name="VCManagedResourceCompilerTool"
192 />
193 <Tool
194 Name="VCResourceCompilerTool"
195 />
196 <Tool
197 Name="VCPreLinkEventTool"
198 />
199 <Tool
200 Name="VCLibrarianTool"
201 OutputFile="$(OutDir)/llcharacter.lib"
202 />
203 <Tool
204 Name="VCALinkTool"
205 />
206 <Tool
207 Name="VCXDCMakeTool"
208 />
209 <Tool
210 Name="VCBscMakeTool"
211 />
212 <Tool
213 Name="VCFxCopTool"
214 />
215 <Tool
216 Name="VCPostBuildEventTool"
217 />
218 </Configuration>
219 </Configurations>
220 <References>
221 </References>
222 <Files>
223 <Filter
224 Name="Source Files"
225 Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
226 UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
227 >
228 <File
229 RelativePath=".\llanimationstates.cpp"
230 >
231 </File>
232 <File
233 RelativePath=".\llbvhloader.cpp"
234 >
235 </File>
236 <File
237 RelativePath=".\llcharacter.cpp"
238 >
239 </File>
240 <File
241 RelativePath=".\lleditingmotion.cpp"
242 >
243 </File>
244 <File
245 RelativePath=".\llgesture.cpp"
246 >
247 </File>
248 <File
249 RelativePath=".\llhandmotion.cpp"
250 >
251 </File>
252 <File
253 RelativePath=".\llheadrotmotion.cpp"
254 >
255 </File>
256 <File
257 RelativePath=".\lljoint.cpp"
258 >
259 </File>
260 <File
261 RelativePath=".\lljointsolverrp3.cpp"
262 >
263 </File>
264 <File
265 RelativePath=".\llkeyframefallmotion.cpp"
266 >
267 </File>
268 <File
269 RelativePath=".\llkeyframemotion.cpp"
270 >
271 </File>
272 <File
273 RelativePath=".\llkeyframemotionparam.cpp"
274 >
275 </File>
276 <File
277 RelativePath=".\llkeyframestandmotion.cpp"
278 >
279 </File>
280 <File
281 RelativePath=".\llkeyframewalkmotion.cpp"
282 >
283 </File>
284 <File
285 RelativePath=".\llmotion.cpp"
286 >
287 </File>
288 <File
289 RelativePath=".\llmotioncontroller.cpp"
290 >
291 </File>
292 <File
293 RelativePath=".\llmultigesture.cpp"
294 >
295 </File>
296 <File
297 RelativePath=".\llpose.cpp"
298 >
299 </File>
300 <File
301 RelativePath=".\llstatemachine.cpp"
302 >
303 </File>
304 <File
305 RelativePath=".\lltargetingmotion.cpp"
306 >
307 </File>
308 <File
309 RelativePath=".\llvisualparam.cpp"
310 >
311 </File>
312 </Filter>
313 <Filter
314 Name="Header Files"
315 Filter="h;hpp;hxx;hm;inl;inc;xsd"
316 UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
317 >
318 <File
319 RelativePath=".\llanimationstates.h"
320 >
321 </File>
322 <File
323 RelativePath=".\llbvhloader.h"
324 >
325 </File>
326 <File
327 RelativePath=".\llcharacter.h"
328 >
329 </File>
330 <File
331 RelativePath=".\lleditingmotion.h"
332 >
333 </File>
334 <File
335 RelativePath=".\llgesture.h"
336 >
337 </File>
338 <File
339 RelativePath=".\llhandmotion.h"
340 >
341 </File>
342 <File
343 RelativePath=".\llheadrotmotion.h"
344 >
345 </File>
346 <File
347 RelativePath=".\lljoint.h"
348 >
349 </File>
350 <File
351 RelativePath=".\lljointsolverrp3.h"
352 >
353 </File>
354 <File
355 RelativePath=".\lljointstate.h"
356 >
357 </File>
358 <File
359 RelativePath=".\llkeyframefallmotion.h"
360 >
361 </File>
362 <File
363 RelativePath=".\llkeyframemotion.h"
364 >
365 </File>
366 <File
367 RelativePath=".\llkeyframemotionparam.h"
368 >
369 </File>
370 <File
371 RelativePath=".\llkeyframestandmotion.h"
372 >
373 </File>
374 <File
375 RelativePath=".\llkeyframewalkmotion.h"
376 >
377 </File>
378 <File
379 RelativePath=".\llmotion.h"
380 >
381 </File>
382 <File
383 RelativePath=".\llmotioncontroller.h"
384 >
385 </File>
386 <File
387 RelativePath=".\llmultigesture.h"
388 >
389 </File>
390 <File
391 RelativePath=".\llpose.h"
392 >
393 </File>
394 <File
395 RelativePath=".\llstatemachine.h"
396 >
397 </File>
398 <File
399 RelativePath=".\lltargetingmotion.h"
400 >
401 </File>
402 <File
403 RelativePath=".\llvisualparam.h"
404 >
405 </File>
406 </Filter>
407 <Filter
408 Name="Resource Files"
409 Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx"
410 UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"
411 >
412 </Filter>
413 </Files>
414 <Globals>
415 </Globals>
416</VisualStudioProject>
diff --git a/linden/indra/llcharacter/lljoint.cpp b/linden/indra/llcharacter/lljoint.cpp
index 4ef9835..4102612 100644
--- a/linden/indra/llcharacter/lljoint.cpp
+++ b/linden/indra/llcharacter/lljoint.cpp
@@ -69,8 +69,9 @@ LLJoint::LLJoint(const std::string &name, LLJoint *parent)
69 69
70 setName(name); 70 setName(name);
71 if (parent) 71 if (parent)
72 {
72 parent->addChild( this ); 73 parent->addChild( this );
73 74 }
74 touch(); 75 touch();
75} 76}
76 77
@@ -80,6 +81,10 @@ LLJoint::LLJoint(const std::string &name, LLJoint *parent)
80//----------------------------------------------------------------------------- 81//-----------------------------------------------------------------------------
81LLJoint::~LLJoint() 82LLJoint::~LLJoint()
82{ 83{
84 if (mParent)
85 {
86 mParent->removeChild( this );
87 }
83 removeAllChildren(); 88 removeAllChildren();
84} 89}
85 90
@@ -91,7 +96,9 @@ void LLJoint::setup(const std::string &name, LLJoint *parent)
91{ 96{
92 setName(name); 97 setName(name);
93 if (parent) 98 if (parent)
99 {
94 parent->addChild( this ); 100 parent->addChild( this );
101 }
95} 102}
96 103
97//----------------------------------------------------------------------------- 104//-----------------------------------------------------------------------------
@@ -109,11 +116,11 @@ void LLJoint::touch(U32 flags)
109 { 116 {
110 child_flags |= POSITION_DIRTY; 117 child_flags |= POSITION_DIRTY;
111 } 118 }
112 119
113 for ( LLJoint *joint = mChildren.getFirstData(); 120 for (child_list_t::iterator iter = mChildren.begin();
114 joint != NULL; 121 iter != mChildren.end(); ++iter)
115 joint = mChildren.getNextData() )
116 { 122 {
123 LLJoint* joint = *iter;
117 joint->touch(child_flags); 124 joint->touch(child_flags);
118 } 125 }
119 } 126 }
@@ -140,13 +147,15 @@ LLJoint *LLJoint::findJoint( const std::string &name )
140 if (name == getName()) 147 if (name == getName())
141 return this; 148 return this;
142 149
143 for ( LLJoint *j = mChildren.getFirstData(); 150 for (child_list_t::iterator iter = mChildren.begin();
144 j != NULL; 151 iter != mChildren.end(); ++iter)
145 j = mChildren.getNextData() )
146 { 152 {
147 LLJoint *found = j->findJoint(name); 153 LLJoint* joint = *iter;
154 LLJoint *found = joint->findJoint(name);
148 if (found) 155 if (found)
156 {
149 return found; 157 return found;
158 }
150 } 159 }
151 160
152 return NULL; 161 return NULL;
@@ -156,12 +165,12 @@ LLJoint *LLJoint::findJoint( const std::string &name )
156//-------------------------------------------------------------------- 165//--------------------------------------------------------------------
157// addChild() 166// addChild()
158//-------------------------------------------------------------------- 167//--------------------------------------------------------------------
159void LLJoint::addChild(LLJoint *joint) 168void LLJoint::addChild(LLJoint* joint)
160{ 169{
161 if (joint->mParent) 170 if (joint->mParent)
162 joint->mParent->removeChild(joint); 171 joint->mParent->removeChild(joint);
163 172
164 mChildren.addDataAtEnd(joint); 173 mChildren.push_back(joint);
165 joint->mXform.setParent(&mXform); 174 joint->mXform.setParent(&mXform);
166 joint->mParent = this; 175 joint->mParent = this;
167 joint->touch(); 176 joint->touch();
@@ -171,9 +180,13 @@ void LLJoint::addChild(LLJoint *joint)
171//-------------------------------------------------------------------- 180//--------------------------------------------------------------------
172// removeChild() 181// removeChild()
173//-------------------------------------------------------------------- 182//--------------------------------------------------------------------
174void LLJoint::removeChild(LLJoint *joint) 183void LLJoint::removeChild(LLJoint* joint)
175{ 184{
176 this->mChildren.removeData(joint); 185 child_list_t::iterator iter = std::find(mChildren.begin(), mChildren.end(), joint);
186 if (iter != mChildren.end())
187 {
188 this->mChildren.erase(iter);
189 }
177 joint->mXform.setParent(NULL); 190 joint->mXform.setParent(NULL);
178 joint->mParent = NULL; 191 joint->mParent = NULL;
179 joint->touch(); 192 joint->touch();
@@ -185,11 +198,15 @@ void LLJoint::removeChild(LLJoint *joint)
185//-------------------------------------------------------------------- 198//--------------------------------------------------------------------
186void LLJoint::removeAllChildren() 199void LLJoint::removeAllChildren()
187{ 200{
188 for ( LLJoint *joint = mChildren.getFirstData(); 201 for (child_list_t::iterator iter = mChildren.begin();
189 joint != NULL; 202 iter != mChildren.end();)
190 joint = mChildren.getNextData() )
191 { 203 {
192 removeChild(joint); 204 child_list_t::iterator curiter = iter++;
205 LLJoint* joint = *curiter;
206 mChildren.erase(curiter);
207 joint->mXform.setParent(NULL);
208 joint->mParent = NULL;
209 joint->touch();
193 } 210 }
194} 211}
195 212
@@ -208,8 +225,11 @@ const LLVector3& LLJoint::getPosition()
208//-------------------------------------------------------------------- 225//--------------------------------------------------------------------
209void LLJoint::setPosition( const LLVector3& pos ) 226void LLJoint::setPosition( const LLVector3& pos )
210{ 227{
211 mXform.setPosition(pos); 228// if (mXform.getPosition() != pos)
212 touch(MATRIX_DIRTY | POSITION_DIRTY); 229 {
230 mXform.setPosition(pos);
231 touch(MATRIX_DIRTY | POSITION_DIRTY);
232 }
213} 233}
214 234
215 235
@@ -276,8 +296,11 @@ void LLJoint::setRotation( const LLQuaternion& rot )
276{ 296{
277 if (rot.isFinite()) 297 if (rot.isFinite())
278 { 298 {
279 mXform.setRotation(rot); 299 // if (mXform.getRotation() != rot)
280 touch(MATRIX_DIRTY | ROTATION_DIRTY); 300 {
301 mXform.setRotation(rot);
302 touch(MATRIX_DIRTY | ROTATION_DIRTY);
303 }
281 } 304 }
282} 305}
283 306
@@ -339,8 +362,12 @@ const LLVector3& LLJoint::getScale()
339//-------------------------------------------------------------------- 362//--------------------------------------------------------------------
340void LLJoint::setScale( const LLVector3& scale ) 363void LLJoint::setScale( const LLVector3& scale )
341{ 364{
342 mXform.setScale(scale); 365// if (mXform.getScale() != scale)
343 touch(); 366 {
367 mXform.setScale(scale);
368 touch();
369 }
370
344} 371}
345 372
346 373
@@ -412,14 +439,18 @@ void LLJoint::updateWorldPRSParent()
412// updateWorldMatrixChildren() 439// updateWorldMatrixChildren()
413//----------------------------------------------------------------------------- 440//-----------------------------------------------------------------------------
414void LLJoint::updateWorldMatrixChildren() 441void LLJoint::updateWorldMatrixChildren()
415{ 442{
443 if (!this->mUpdateXform) return;
444
416 if (mDirtyFlags & MATRIX_DIRTY) 445 if (mDirtyFlags & MATRIX_DIRTY)
417 { 446 {
418 updateWorldMatrix(); 447 updateWorldMatrix();
419 } 448 }
420 for (LLJoint *child = mChildren.getFirstData(); child; child = mChildren.getNextData()) 449 for (child_list_t::iterator iter = mChildren.begin();
450 iter != mChildren.end(); ++iter)
421 { 451 {
422 child->updateWorldMatrixChildren(); 452 LLJoint* joint = *iter;
453 joint->updateWorldMatrixChildren();
423 } 454 }
424} 455}
425 456
@@ -494,8 +525,10 @@ void LLJoint::clampRotation(LLQuaternion old_rot, LLQuaternion new_rot)
494{ 525{
495 LLVector3 main_axis(1.f, 0.f, 0.f); 526 LLVector3 main_axis(1.f, 0.f, 0.f);
496 527
497 for (LLJoint* joint = mChildren.getFirstData(); joint; joint = mChildren.getNextData()) 528 for (child_list_t::iterator iter = mChildren.begin();
529 iter != mChildren.end(); ++iter)
498 { 530 {
531 LLJoint* joint = *iter;
499 if (joint->isAnimatable()) 532 if (joint->isAnimatable())
500 { 533 {
501 main_axis = joint->getPosition(); 534 main_axis = joint->getPosition();
diff --git a/linden/indra/llcharacter/lljoint.h b/linden/indra/llcharacter/lljoint.h
index 15b82c2..352d222 100644
--- a/linden/indra/llcharacter/lljoint.h
+++ b/linden/indra/llcharacter/lljoint.h
@@ -95,7 +95,8 @@ public:
95 LLDynamicArray<LLVector3> mConstraintSilhouette; 95 LLDynamicArray<LLVector3> mConstraintSilhouette;
96 96
97 // child joints 97 // child joints
98 LLLinkedList<LLJoint> mChildren; 98 typedef std::list<LLJoint*> child_list_t;
99 child_list_t mChildren;
99 100
100 // debug statics 101 // debug statics
101 static S32 sNumTouches; 102 static S32 sNumTouches;
diff --git a/linden/indra/llcharacter/llkeyframemotion.cpp b/linden/indra/llcharacter/llkeyframemotion.cpp
index e5b0d99..d09de0e 100644
--- a/linden/indra/llcharacter/llkeyframemotion.cpp
+++ b/linden/indra/llcharacter/llkeyframemotion.cpp
@@ -1720,9 +1720,9 @@ BOOL LLKeyframeMotion::serialize(LLDataPacker& dp) const
1720 { 1720 {
1721 success &= dp.packU8(shared_constraintp->mChainLength, "chain_length"); 1721 success &= dp.packU8(shared_constraintp->mChainLength, "chain_length");
1722 success &= dp.packU8(shared_constraintp->mConstraintType, "constraint_type"); 1722 success &= dp.packU8(shared_constraintp->mConstraintType, "constraint_type");
1723 char volume_name[16]; 1723 char volume_name[16]; /* Flawfinder: ignore */
1724 snprintf(volume_name, sizeof(volume_name), "%s", 1724 snprintf(volume_name, sizeof(volume_name), "%s", /* Flawfinder: ignore */
1725 mCharacter->findCollisionVolume(shared_constraintp->mSourceConstraintVolume)->getName().c_str()); /* Flawfinder: ignore */ 1725 mCharacter->findCollisionVolume(shared_constraintp->mSourceConstraintVolume)->getName().c_str());
1726 success &= dp.packBinaryDataFixed((U8*)volume_name, 16, "source_volume"); 1726 success &= dp.packBinaryDataFixed((U8*)volume_name, 16, "source_volume");
1727 success &= dp.packVector3(shared_constraintp->mSourceConstraintOffset, "source_offset"); 1727 success &= dp.packVector3(shared_constraintp->mSourceConstraintOffset, "source_offset");
1728 if (shared_constraintp->mConstraintTargetType == TYPE_GROUND) 1728 if (shared_constraintp->mConstraintTargetType == TYPE_GROUND)
@@ -1731,8 +1731,8 @@ BOOL LLKeyframeMotion::serialize(LLDataPacker& dp) const
1731 } 1731 }
1732 else 1732 else
1733 { 1733 {
1734 snprintf(volume_name, sizeof(volume_name),"%s", 1734 snprintf(volume_name, sizeof(volume_name),"%s", /* Flawfinder: ignore */
1735 mCharacter->findCollisionVolume(shared_constraintp->mTargetConstraintVolume)->getName().c_str()); /* Flawfinder: ignore */ 1735 mCharacter->findCollisionVolume(shared_constraintp->mTargetConstraintVolume)->getName().c_str());
1736 } 1736 }
1737 success &= dp.packBinaryDataFixed((U8*)volume_name, 16, "target_volume"); 1737 success &= dp.packBinaryDataFixed((U8*)volume_name, 16, "target_volume");
1738 success &= dp.packVector3(shared_constraintp->mTargetConstraintOffset, "target_offset"); 1738 success &= dp.packVector3(shared_constraintp->mTargetConstraintOffset, "target_offset");
@@ -1911,28 +1911,26 @@ void LLKeyframeMotion::onLoadComplete(LLVFS *vfs,
1911 void* user_data, S32 status) 1911 void* user_data, S32 status)
1912{ 1912{
1913 LLUUID* id = (LLUUID*)user_data; 1913 LLUUID* id = (LLUUID*)user_data;
1914
1915 std::vector<LLCharacter* >::iterator char_iter = LLCharacter::sInstances.begin();
1914 1916
1915 LLCharacter* character = NULL; 1917 while(char_iter != LLCharacter::sInstances.end() &&
1918 (*char_iter)->getID() != *id)
1919 {
1920 ++char_iter;
1921 }
1916 1922
1917 for(character = LLCharacter::sInstances.getFirstData();
1918 character;
1919 character = LLCharacter::sInstances.getNextData())
1920 {
1921 if (character->getID() == *id)
1922 {
1923 break;
1924 }
1925 }
1926
1927 delete id; 1923 delete id;
1928 1924
1929 if (!character) 1925 if (char_iter == LLCharacter::sInstances.end())
1930 { 1926 {
1931 return; 1927 return;
1932 } 1928 }
1933 1929
1930 LLCharacter* character = *char_iter;
1931
1934 // create an instance of this motion (it may or may not already exist) 1932 // create an instance of this motion (it may or may not already exist)
1935 LLKeyframeMotion* motionp = (LLKeyframeMotion*)character->createMotion(asset_uuid); 1933 LLKeyframeMotion* motionp = (LLKeyframeMotion*) character->createMotion(asset_uuid);
1936 1934
1937 if (0 == status && motionp) 1935 if (0 == status && motionp)
1938 { 1936 {
diff --git a/linden/indra/llcharacter/llkeyframemotionparam.cpp b/linden/indra/llcharacter/llkeyframemotionparam.cpp
index 0bdc723..93df410 100644
--- a/linden/indra/llcharacter/llkeyframemotionparam.cpp
+++ b/linden/indra/llcharacter/llkeyframemotionparam.cpp
@@ -348,9 +348,9 @@ BOOL LLKeyframeMotionParam::loadMotions()
348 // Load data into a buffer to be parsed. 348 // Load data into a buffer to be parsed.
349 //------------------------------------------------------------------------- 349 //-------------------------------------------------------------------------
350 char path[LL_MAX_PATH]; /* Flawfinder: ignore */ 350 char path[LL_MAX_PATH]; /* Flawfinder: ignore */
351 snprintf( path, sizeof(path), "%s_%s.llp", 351 snprintf( path,sizeof(path), "%s_%s.llp", /* Flawfinder: ignore */
352 gDirUtilp->getExpandedFilename(LL_PATH_MOTIONS,mCharacter->getAnimationPrefix()).c_str(), 352 gDirUtilp->getExpandedFilename(LL_PATH_MOTIONS,mCharacter->getAnimationPrefix()).c_str(),
353 getName().c_str() ); /* Flawfinder: ignore */ 353 getName().c_str() );
354 354
355 //------------------------------------------------------------------------- 355 //-------------------------------------------------------------------------
356 // open the file 356 // open the file
@@ -425,7 +425,7 @@ BOOL LLKeyframeMotionParam::loadMotions()
425 // get priority 425 // get priority
426 //------------------------------------------------------------------------- 426 //-------------------------------------------------------------------------
427 BOOL isFirstMotion = TRUE; 427 BOOL isFirstMotion = TRUE;
428 num = sscanf(p, "%79s %79s %f", strA, strB, &floatA); 428 num = sscanf(p, "%79s %79s %f", strA, strB, &floatA); /* Flawfinder: ignore */
429 429
430 while(1) 430 while(1)
431 { 431 {
@@ -451,7 +451,7 @@ BOOL LLKeyframeMotionParam::loadMotions()
451 } 451 }
452 452
453 p++; 453 p++;
454 num = sscanf(p, "%79s %79s %f", strA, strB, &floatA); 454 num = sscanf(p, "%79s %79s %f", strA, strB, &floatA); /* Flawfinder: ignore */
455 } 455 }
456 456
457 delete [] text; 457 delete [] text;