sl@0: /* sl@0: * Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). sl@0: * All rights reserved. sl@0: * This component and the accompanying materials are made available sl@0: * under the terms of "Eclipse Public License v1.0" sl@0: * which accompanies this distribution, and is available sl@0: * at the URL "http://www.eclipse.org/legal/epl-v10.html". sl@0: * sl@0: * Initial Contributors: sl@0: * Nokia Corporation - initial contribution. sl@0: * sl@0: * Contributors: sl@0: * sl@0: * Description: sl@0: * sl@0: */ sl@0: sl@0: sl@0: // [INCLUDE FILES] - do not remove sl@0: #include sl@0: #include "widecharclassapiBCTest.h" sl@0: sl@0: #include sl@0: #include sl@0: #include sl@0: #include sl@0: sl@0: sl@0: // EXTERNAL DATA STRUCTURES sl@0: //extern ?external_data; sl@0: sl@0: // EXTERNAL FUNCTION PROTOTYPES sl@0: //extern ?external_function( ?arg_type,?arg_type ); sl@0: sl@0: // CONSTANTS sl@0: //const ?type ?constant_var = ?constant; sl@0: sl@0: // MACROS sl@0: //#define ?macro ?macro_def sl@0: sl@0: // LOCAL CONSTANTS AND MACROS sl@0: //const ?type ?constant_var = ?constant; sl@0: //#define ?macro_name ?macro_def sl@0: sl@0: // MODULE DATA STRUCTURES sl@0: //enum ?declaration sl@0: //typedef ?declaration sl@0: sl@0: // LOCAL FUNCTION PROTOTYPES sl@0: //?type ?function_name( ?arg_type, ?arg_type ); sl@0: sl@0: // FORWARD DECLARATIONS sl@0: //class ?FORWARD_CLASSNAME; sl@0: sl@0: // ============================= LOCAL FUNCTIONS =============================== sl@0: sl@0: // ----------------------------------------------------------------------------- sl@0: // ?function_name ?description. sl@0: // ?description sl@0: // Returns: ?value_1: ?description sl@0: // ?value_n: ?description_line1 sl@0: // ?description_line2 sl@0: // ----------------------------------------------------------------------------- sl@0: // sl@0: /* sl@0: ?type ?function_name( sl@0: ?arg_type arg, // ?description sl@0: ?arg_type arg) // ?description sl@0: { sl@0: sl@0: ?code // ?comment sl@0: sl@0: // ?comment sl@0: ?code sl@0: } sl@0: */ sl@0: sl@0: // ============================ MEMBER FUNCTIONS =============================== sl@0: sl@0: // ----------------------------------------------------------------------------- sl@0: // CwidecharclassapiBCTest::Case sl@0: // Returns a test case by number. sl@0: // sl@0: // This function contains an array of all available test cases sl@0: // i.e pair of case name and test function. If case specified by parameter sl@0: // aCaseNumber is found from array, then that item is returned. sl@0: // sl@0: // The reason for this rather complicated function is to specify all the sl@0: // test cases only in one place. It is not necessary to understand how sl@0: // function pointers to class member functions works when adding new test sl@0: // cases. See function body for instructions how to add new test case. sl@0: // ----------------------------------------------------------------------------- sl@0: // sl@0: const TCaseInfo CwidecharclassapiBCTest::Case ( sl@0: const TInt aCaseNumber ) const sl@0: { sl@0: sl@0: /** sl@0: * To add new test cases, implement new test case function and add new sl@0: * line to KCases array specify the name of the case and the function sl@0: * doing the test case sl@0: * In practice, do following sl@0: * 1) Make copy of existing test case function and change its name sl@0: * and functionality. Note that the function must be added to sl@0: * widecharclassapiBCTest.cpp file and to widecharclassapiBCTest.h sl@0: * header file. sl@0: * sl@0: * 2) Add entry to following KCases array either by using: sl@0: * sl@0: * 2.1: FUNCENTRY or ENTRY macro sl@0: * ENTRY macro takes two parameters: test case name and test case sl@0: * function name. sl@0: * sl@0: * FUNCENTRY macro takes only test case function name as a parameter and sl@0: * uses that as a test case name and test case function name. sl@0: * sl@0: * Or sl@0: * sl@0: * 2.2: OOM_FUNCENTRY or OOM_ENTRY macro. Note that these macros are used sl@0: * only with OOM (Out-Of-Memory) testing! sl@0: * sl@0: * OOM_ENTRY macro takes five parameters: test case name, test case sl@0: * function name, TBool which specifies is method supposed to be run using sl@0: * OOM conditions, TInt value for first heap memory allocation failure and sl@0: * TInt value for last heap memory allocation failure. sl@0: * sl@0: * OOM_FUNCENTRY macro takes test case function name as a parameter and uses sl@0: * that as a test case name, TBool which specifies is method supposed to be sl@0: * run using OOM conditions, TInt value for first heap memory allocation sl@0: * failure and TInt value for last heap memory allocation failure. sl@0: */ sl@0: sl@0: static TCaseInfoInternal const KCases[] = sl@0: { sl@0: // [test cases entries] - do not remove sl@0: sl@0: // NOTE: When compiled to GCCE, there must be Classname:: sl@0: // declaration in front of the method name, e.g. sl@0: // CwidecharclassapiBCTest::PrintTest. Otherwise the compiler sl@0: // gives errors. sl@0: sl@0: ENTRY( "Arithmetic Functions test", CwidecharclassapiBCTest::ArithmeticTest ), sl@0: ENTRY( "File Manipulation test", CwidecharclassapiBCTest::FileManipulationTest ), sl@0: ENTRY( "Console Operations test", CwidecharclassapiBCTest::ConsoleOperationsTest ), sl@0: ENTRY( "String Operations test", CwidecharclassapiBCTest::StringOperationsTest ), sl@0: ENTRY( "Conversion Operations test", CwidecharclassapiBCTest::ConversionOperationsTest ), sl@0: // Example how to use OOM functionality sl@0: //OOM_ENTRY( "Loop test with OOM", CwidecharclassapiBCTest::LoopTest, ETrue, 2, 3), sl@0: //OOM_FUNCENTRY( CwidecharclassapiBCTest::PrintTest, ETrue, 1, 3 ), sl@0: }; sl@0: sl@0: // Verify that case number is valid sl@0: if( (TUint) aCaseNumber >= sizeof( KCases ) / sl@0: sizeof( TCaseInfoInternal ) ) sl@0: { sl@0: // Invalid case, construct empty object sl@0: TCaseInfo null( (const TText*) L"" ); sl@0: null.iMethod = NULL; sl@0: null.iIsOOMTest = EFalse; sl@0: null.iFirstMemoryAllocation = 0; sl@0: null.iLastMemoryAllocation = 0; sl@0: return null; sl@0: } sl@0: sl@0: // Construct TCaseInfo object and return it sl@0: TCaseInfo tmp ( KCases[ aCaseNumber ].iCaseName ); sl@0: tmp.iMethod = KCases[ aCaseNumber ].iMethod; sl@0: tmp.iIsOOMTest = KCases[ aCaseNumber ].iIsOOMTest; sl@0: tmp.iFirstMemoryAllocation = KCases[ aCaseNumber ].iFirstMemoryAllocation; sl@0: tmp.iLastMemoryAllocation = KCases[ aCaseNumber ].iLastMemoryAllocation; sl@0: return tmp; sl@0: sl@0: } sl@0: sl@0: sl@0: int WriteVarPrintfConsole (char *format, ...) sl@0: { sl@0: int result; sl@0: va_list args; sl@0: va_start (args, format); sl@0: result = std::vwprintf (L"%d", args); sl@0: va_end (args); sl@0: return result; sl@0: } sl@0: sl@0: int WriteVarPrintfFile (FILE * stream, char * format, ...) sl@0: { sl@0: int result; sl@0: va_list args; sl@0: va_start (args, format); sl@0: result = std::vfwprintf (stream, L"%d", args); sl@0: va_end (args); sl@0: return result; sl@0: } sl@0: sl@0: int WriteVarPrintfString (wchar_t * outputBuf, int sizeBuf, char * format, ...) sl@0: { sl@0: int result; sl@0: va_list args; sl@0: va_start (args, format); sl@0: result = std::vswprintf (outputBuf, sizeBuf, L"%d", args); sl@0: va_end (args); sl@0: return result; sl@0: } sl@0: sl@0: sl@0: sl@0: sl@0: TInt CwidecharclassapiBCTest::FileManipulationTest( TTestResult& aResult ) sl@0: { sl@0: int testError = 0; sl@0: __UHEAP_MARK; sl@0: sl@0: sl@0: const wchar_t *wsList = L"This is Wide Character Class API test."; sl@0: const wchar_t *wPrintfTestFormat = L"%d"; sl@0: sl@0: wchar_t wsListRead[64]; sl@0: wchar_t wPrintfTestReadList[64]; sl@0: std::wint_t wc = 88; sl@0: int c = 65; sl@0: sl@0: sl@0: char fileName[]="c:\\data\\others\\widechartest.txt"; sl@0: remove(fileName); sl@0: sl@0: FILE *fp = NULL; sl@0: sl@0: /* opening the output file */ sl@0: fp = fopen(fileName,"w"); sl@0: if(fp == NULL) sl@0: { sl@0: testError++; sl@0: } sl@0: sl@0: //Test std::fwide sl@0: int fileOrientation ; sl@0: sl@0: fileOrientation = std::fwide(fp, 0); sl@0: sl@0: sl@0: //Test std::fwprintf sl@0: int fWritePrResult = std::fwprintf(fp, wPrintfTestFormat, c); sl@0: if(fWritePrResult < 0) sl@0: testError++; sl@0: sl@0: //Test std::vfwprintf sl@0: int fWriteVPrResult = WriteVarPrintfFile(fp, "%d", c); sl@0: if(fWriteVPrResult < 0) sl@0: testError++; sl@0: sl@0: sl@0: //Test std::fputwc sl@0: std::wint_t fWriteWCResult = std::fputwc(wc,fp); sl@0: if(fWriteWCResult == WEOF) sl@0: testError++; sl@0: sl@0: //Test std::fputws sl@0: int fWriteWSResult = std::fputws(wsList, fp); sl@0: if(fWriteWSResult < 0) sl@0: testError++; sl@0: sl@0: sl@0: fclose(fp); sl@0: sl@0: sl@0: sl@0: int wsListLength = std::wcslen(wsList); sl@0: int wPrintTestListLength = std::wcslen(wPrintfTestFormat); sl@0: sl@0: sl@0: /* opening the input file */ sl@0: fp = fopen(fileName,"r"); sl@0: if(fp == NULL) sl@0: { sl@0: testError++; sl@0: } sl@0: sl@0: //Test std::fwscanf sl@0: int inpC; sl@0: int fReadPrResult = std::fwscanf(fp, wPrintfTestFormat, &inpC); sl@0: if(fReadPrResult < 0) sl@0: testError++; sl@0: fReadPrResult = std::fwscanf(fp, wPrintfTestFormat, &inpC); sl@0: if(fReadPrResult < 0) sl@0: testError++; sl@0: sl@0: sl@0: //Test std::fputwc sl@0: std::wint_t fReadWCResult = std::fgetwc(fp); sl@0: if(fReadWCResult == WEOF) sl@0: testError++; sl@0: sl@0: //Test std::fgetws sl@0: wchar_t * ptrReadWSResult = std::fgetws(wsListRead, wsListLength, fp); sl@0: if(ptrReadWSResult == 0) sl@0: testError++; sl@0: sl@0: sl@0: fclose(fp); sl@0: remove(fileName); sl@0: sl@0: sl@0: // Test case passed sl@0: __UHEAP_MARKEND; sl@0: // Sets test case result and description(Maximum size is KStifMaxResultDes) sl@0: if(testError) sl@0: { sl@0: _LIT( KDescriptionErr, "FileManipulationTest failed" ); sl@0: aResult.SetResult( KErrGeneral, KDescriptionErr ); sl@0: sl@0: // Case was executed sl@0: return testError; sl@0: sl@0: } sl@0: sl@0: sl@0: // Case was executed sl@0: return KErrNone; sl@0: sl@0: } sl@0: sl@0: sl@0: TInt CwidecharclassapiBCTest::ConsoleOperationsTest( TTestResult& aResult ) sl@0: { sl@0: int testError = 0; sl@0: __UHEAP_MARK; sl@0: sl@0: freopen("c:\\data\\others\\myconsole.txt", "w", stdout); sl@0: //Test std::putwc sl@0: wchar_t * consoleMessage = L"Enter Character 'v' "; sl@0: fputws(consoleMessage, stdout); sl@0: wint_t putWCResult = std::putwc(L':', stdout); sl@0: sl@0: //Test std::vwprintf sl@0: int c=89; sl@0: int fWriteVPrResult = WriteVarPrintfConsole("%d", c); sl@0: if(fWriteVPrResult < 0) sl@0: testError++; sl@0: sl@0: ungetwc(L'v', stdin); sl@0: sl@0: //Test std::getwc sl@0: wint_t getWCResult; sl@0: getWCResult = std::getwc(stdin); sl@0: sl@0: sl@0: ungetwc(L'v', stdin); sl@0: getWCResult = std::getwchar(); sl@0: sl@0: fclose(stdout); sl@0: fclose(stderr); sl@0: fclose(stdin); sl@0: sl@0: sl@0: // Test case passed sl@0: __UHEAP_MARKEND; sl@0: // Sets test case result and description(Maximum size is KStifMaxResultDes) sl@0: if(testError) sl@0: { sl@0: // Case was executed sl@0: return testError; sl@0: sl@0: } sl@0: sl@0: sl@0: // Case was executed sl@0: return KErrNone; sl@0: sl@0: sl@0: } sl@0: sl@0: sl@0: TInt CwidecharclassapiBCTest::StringOperationsTest( TTestResult& aResult ) sl@0: { sl@0: int testError = 0; sl@0: __UHEAP_MARK; sl@0: sl@0: //Test std::wcscat sl@0: wchar_t wcSRC[64] = L"Wide character"; sl@0: wchar_t wcDST[64] = L"Class API"; sl@0: wchar_t *wcWCSCATResult= std::wcscat(wcDST, (const wchar_t*)wcSRC); sl@0: sl@0: //Test std::wcsncat sl@0: wchar_t *wcWCSNCATResult= std::wcsncat(wcDST, (const wchar_t*)wcSRC, 4); sl@0: sl@0: sl@0: wchar_t *wcSTR = L"Wide Character Class API"; sl@0: wchar_t wcSearch = L'A'; sl@0: //Test std::wcschr sl@0: wchar_t* wcWCSCHRResult = std::wcschr(wcSTR, wcSearch); sl@0: sl@0: //Test std::wcsrchr sl@0: wchar_t* wcWCSRCHRResult = std::wcsrchr(wcSTR, wcSearch); sl@0: sl@0: //Test std::wmemchr sl@0: wchar_t* wcWMEMCHRResult = std::wmemchr(wcSTR, wcSearch, 4); sl@0: sl@0: sl@0: //Test std::wcscmp sl@0: wchar_t *wcS1 = L"ABCDE"; sl@0: wchar_t *wcS2 = L"ACCD"; sl@0: int intWCSCMPResult = std::wcscmp(wcS1, wcS2); sl@0: sl@0: //Test std::wcsncmp sl@0: int intWCSNCMPResult = std::wcsncmp(wcS1, wcS2, 4); sl@0: sl@0: //Test std::wcscoll sl@0: int intWCSCOLLResult = std::wcscoll(wcS1, wcS2); sl@0: sl@0: //Test std::wmemcmp sl@0: int intWMEMCMPResult = std::wmemcmp(wcS1, wcS2, 4); sl@0: sl@0: sl@0: //Test std::wcscpy sl@0: wchar_t wcSRC1[64] = L"Wide character"; sl@0: wchar_t wcDST1[64] = L"Class API"; sl@0: wchar_t *wcWCSCPYResult = std::wcscpy(wcDST1, wcSRC1); sl@0: sl@0: //Test std::wcsncpy sl@0: wchar_t *wcWCSNCPYResult = std::wcsncpy(wcDST1, wcSRC1, 4); sl@0: sl@0: //Test std::wmemcpy sl@0: wchar_t *wcWMEMCPYResult = std::wmemcpy(wcDST1, wcSRC1, 4); sl@0: sl@0: //Test std::wmemmove sl@0: wchar_t *wcWMEMMOVEResult = std::wmemmove(wcDST1, wcSRC1, 4); sl@0: sl@0: //Test std::wmemset sl@0: wchar_t *wcWMEMSETResult = std::wmemset(wcDST1, L'V', 4); sl@0: sl@0: //Test std::wcsxfrm sl@0: size_t lenWCSXFRMResult = std::wcsxfrm(wcDST1, wcSRC1, 15); sl@0: sl@0: //Test std::wcscspn sl@0: const wchar_t wcSTR1[30] = L"1234567890ABCDE!@#$$"; sl@0: const wchar_t wcSpanset[20] = L"ABCDE!@#$$"; sl@0: size_t intWCSCSPNResult = std::wcscspn(wcSTR1, wcSpanset); sl@0: sl@0: //Test std::wcsspn sl@0: size_t intWCSSPNResult = std::wcsspn(wcSTR1, wcSpanset); sl@0: sl@0: //Test std::wcspbrk sl@0: wchar_t * wcptrWCSSPNResult = std::wcspbrk(wcSTR1, wcSpanset); sl@0: sl@0: sl@0: //Test std::wcsftime sl@0: time_t rawtime; sl@0: struct tm * timeinfo; sl@0: wchar_t wcTimeOutput [80]; sl@0: time ( &rawtime ); sl@0: timeinfo = localtime ( &rawtime ); sl@0: size_t lenString = std::wcsftime (wcTimeOutput,80,L"Now is %I:%M%p.",timeinfo); sl@0: sl@0: //Test std::wcslen sl@0: size_t lenSTR = std::wcslen(wcSTR); sl@0: sl@0: //Test std::wcsstr sl@0: wchar_t wcSTR2[64] = L"Wide character Class API"; sl@0: wchar_t wcSUBSTR[64] = L"Class API"; sl@0: wchar_t* wcptrWCSSTR = std::wcsstr(wcSTR2, wcSUBSTR); sl@0: sl@0: sl@0: wchar_t wcSTRDest[64]; sl@0: //Test std::swprintf sl@0: wchar_t *formatSTR = L"%d"; sl@0: int intSampleOutput = 78; sl@0: int returnPrintf = std::swprintf(wcSTRDest, 63, formatSTR, intSampleOutput); sl@0: sl@0: //Test std::swscanf sl@0: int intSampleInput; sl@0: int returnScanf = std::swscanf(wcSTRDest, formatSTR, &intSampleInput); sl@0: sl@0: sl@0: //Test std::vswprintf sl@0: wchar_t outputSTR[32]; sl@0: int c = 76; sl@0: int fWriteVPrResult = WriteVarPrintfString(outputSTR, 32, "%d", c); sl@0: if(fWriteVPrResult < 0) sl@0: testError++; sl@0: sl@0: sl@0: // Test case passed sl@0: __UHEAP_MARKEND; sl@0: // Sets test case result and description(Maximum size is KStifMaxResultDes) sl@0: if(testError) sl@0: { sl@0: // Case was executed sl@0: return testError; sl@0: sl@0: } sl@0: sl@0: // Case was executed sl@0: return KErrNone; sl@0: sl@0: sl@0: } sl@0: sl@0: sl@0: TInt CwidecharclassapiBCTest::ConversionOperationsTest( TTestResult& aResult ) sl@0: { sl@0: int testError = 0; sl@0: //__UHEAP_MARK; sl@0: sl@0: size_t len; sl@0: char *szMBTest = "this is test"; sl@0: mbstate_t mbs; sl@0: mbstate_t ps; sl@0: sl@0: //Test std::btowc sl@0: int c = 65; sl@0: std::wint_t wc; sl@0: /* converting single byte to wide-character */ sl@0: wc = std::btowc(c); sl@0: sl@0: sl@0: //Test std::wcstod sl@0: wchar_t wcs1[21] = L" 1.23abcd"; sl@0: wchar_t wcs2[5]=L"abcd"; sl@0: wchar_t *eptr; sl@0: float d; sl@0: /* convert wide-char string to double */ sl@0: d = std::wcstod(wcs1, &eptr); sl@0: /* compare the result */ sl@0: if(!((d == 1.23F) && !(std::wcscmp (eptr, wcs2)))) sl@0: testError++; sl@0: sl@0: sl@0: //Test std::wcstol sl@0: wchar_t wcs3[8]=L".23abcd"; sl@0: long longintOutput; sl@0: /* convert wide-char string to long int */ sl@0: longintOutput = std::wcstol(wcs1, &eptr, 10); sl@0: /* compare the result */ sl@0: if(!((longintOutput == 1) && !(std::wcscmp (eptr, wcs3)))) sl@0: testError++; sl@0: sl@0: //Test std::wcstoul sl@0: unsigned long unslongintOutput; sl@0: /* convert wide-char string to long int */ sl@0: unslongintOutput = std::wcstoul(wcs1, &eptr, 10); sl@0: /* compare the result */ sl@0: if(!((unslongintOutput == 1) && !(std::wcscmp (eptr, wcs3)))) sl@0: testError++; sl@0: sl@0: sl@0: sl@0: //Test std::wcstok sl@0: const wchar_t *seps = L":"; sl@0: wchar_t *last, *tok, text[] = L"one:twothree"; sl@0: sl@0: tok = std::wcstok(text, seps, &last); sl@0: if(!tok) sl@0: testError++; sl@0: sl@0: sl@0: //Test std::mbsrtowcs sl@0: wchar_t wideCharStringOutput[64]; sl@0: len = std::mbsrtowcs(wideCharStringOutput, (const char**)&szMBTest, 10, &ps); sl@0: /* checking for error */ sl@0: if(len < 0) sl@0: { sl@0: testError++; sl@0: } sl@0: sl@0: //Test std::wcsrtombs sl@0: char mbOutputString[64]; sl@0: wchar_t *wcptrString = wideCharStringOutput; sl@0: size_t lenWCS = std::wcsrtombs(mbOutputString, (const wchar_t**) &wcptrString, len, &ps); sl@0: sl@0: sl@0: //Test std::wcrtomb sl@0: wchar_t wcWCRTOMB = L'v'; sl@0: char mbWCRTOMB[10]; sl@0: len = std::wcrtomb(mbWCRTOMB, wcWCRTOMB, &ps); sl@0: sl@0: // Test case passed sl@0: __UHEAP_MARKEND ; sl@0: sl@0: sl@0: // Sets test case result and description(Maximum size is KStifMaxResultDes) sl@0: if(testError) sl@0: { sl@0: return testError; sl@0: sl@0: } sl@0: sl@0: sl@0: sl@0: // Case was executed sl@0: return KErrNone; sl@0: sl@0: sl@0: } sl@0: sl@0: sl@0: sl@0: TInt CwidecharclassapiBCTest::ArithmeticTest( TTestResult& aResult ) sl@0: { sl@0: sl@0: int testError = 0; sl@0: __UHEAP_MARK; sl@0: sl@0: sl@0: //Test std::mbrlen sl@0: char *szMBTest = "this is test"; sl@0: int aa = 2; sl@0: mbstate_t mbs; sl@0: memset(&mbs, 0, sizeof(mbs)); sl@0: // size_t charlen = std::mbrlen(szMBTest, 6, &mbs); sl@0: size_t charlen = std::mbrlen((const char*)&aa, 6, &mbs); sl@0: sl@0: //Test std::mbrtowc sl@0: size_t len; sl@0: wchar_t wcMBCOutput[100]; sl@0: char *s = "a"; sl@0: size_t n = 1; sl@0: mbstate_t ps; sl@0: /* converting multibyte sequence to a wide-char sequence */ sl@0: len = std::mbrtowc(wcMBCOutput,(const char *) s, n, &ps); sl@0: /* checking for error value */ sl@0: if(len < 0) sl@0: { sl@0: testError++; sl@0: } sl@0: sl@0: sl@0: //Test std::mbsinit sl@0: int mbINITOutput = std::mbsinit((const mbstate_t*) &ps); sl@0: sl@0: sl@0: // Test case passed sl@0: sl@0: // Sets test case result and description(Maximum size is KStifMaxResultDes) sl@0: if(testError) sl@0: { sl@0: _LIT( KDescriptionErr, "ArithmeticTest failed" ); sl@0: aResult.SetResult( KErrGeneral, KDescriptionErr ); sl@0: sl@0: // Case was executed sl@0: return testError; sl@0: sl@0: } sl@0: sl@0: _LIT( KDescription, "LoopTest passed" ); sl@0: aResult.SetResult( KErrNone, KDescription ); sl@0: sl@0: __UHEAP_MARK; sl@0: sl@0: // Case was executed sl@0: return KErrNone; sl@0: sl@0: } sl@0: sl@0: sl@0: sl@0: // ----------------------------------------------------------------------------- sl@0: // ?classname::?member_function sl@0: // ?implementation_description sl@0: // (other items were commented in a header). sl@0: // ----------------------------------------------------------------------------- sl@0: // sl@0: /* sl@0: ?type ?classname::?member_function( sl@0: ?arg_type arg, sl@0: ?arg_type arg ) sl@0: { sl@0: sl@0: ?code sl@0: sl@0: } sl@0: */ sl@0: sl@0: // ========================== OTHER EXPORTED FUNCTIONS ========================= sl@0: sl@0: // ----------------------------------------------------------------------------- sl@0: // ?function_name implements... sl@0: // ?implementation_description. sl@0: // Returns: ?value_1: ?description sl@0: // ?value_n: ?description sl@0: // ?description sl@0: // ----------------------------------------------------------------------------- sl@0: // sl@0: /* sl@0: ?type ?function_name( sl@0: ?arg_type arg, // ?description sl@0: ?arg_type arg ) // ?description sl@0: { sl@0: sl@0: ?code sl@0: sl@0: } sl@0: */ sl@0: // [End of File] - do not remove