| 1 | // | 
|---|
| 2 | // Cforall Version 1.0.0 Copyright (C) 2019 University of Waterloo | 
|---|
| 3 | // | 
|---|
| 4 | // manipulatorsInput.cfa -- | 
|---|
| 5 | // | 
|---|
| 6 | // Author           : Peter A. Buhr | 
|---|
| 7 | // Created On       : Sat Jun  8 17:58:54 2019 | 
|---|
| 8 | // Last Modified By : Peter A. Buhr | 
|---|
| 9 | // Last Modified On : Sat Sep  2 14:27:46 2023 | 
|---|
| 10 | // Update Count     : 65 | 
|---|
| 11 | // | 
|---|
| 12 |  | 
|---|
| 13 | #include <fstream.hfa> | 
|---|
| 14 | #include <stdio.h>                                      // scanf | 
|---|
| 15 |  | 
|---|
| 16 | int main() { | 
|---|
| 17 | { | 
|---|
| 18 | // Upfront checks to ensure buffer safety.  Once these pass, the simpler `wdi(sizeof(s),s)` | 
|---|
| 19 | // usage, as in the scanf alignment cases below, is justified. | 
|---|
| 20 | struct { | 
|---|
| 21 | char buf[8]; | 
|---|
| 22 | char canary; | 
|---|
| 23 | } data; | 
|---|
| 24 | static_assert( sizeof(data.buf) == 8 ); | 
|---|
| 25 | static_assert( &data.buf[8] == &data.canary );  // canary comes right after buf | 
|---|
| 26 |  | 
|---|
| 27 | void rep(const char* casename) { | 
|---|
| 28 | data.canary = 42; | 
|---|
| 29 | bool caught = false; | 
|---|
| 30 | try { | 
|---|
| 31 | sin | wdi( sizeof(data.buf), data.buf ); | 
|---|
| 32 | } catch (cstring_length*) { | 
|---|
| 33 | caught = true; | 
|---|
| 34 | } | 
|---|
| 35 | printf( "%s \"%s\"", casename, data.buf ); | 
|---|
| 36 | if ( caught ) { | 
|---|
| 37 | printf(", exception occurred"); | 
|---|
| 38 | } | 
|---|
| 39 | if ( data.canary == 42 ) { | 
|---|
| 40 | printf(", canary ok"); | 
|---|
| 41 | } else { | 
|---|
| 42 | printf(", canary overwritten to %d", data.canary); | 
|---|
| 43 | } | 
|---|
| 44 | printf("\n"); | 
|---|
| 45 | } | 
|---|
| 46 |  | 
|---|
| 47 | rep("pre1");    // 123456     |  123456 | 
|---|
| 48 | rep("pre2");    // 1234567    |  1234567 | 
|---|
| 49 | rep("pre3a");   // 12345678   |  1234567 | 
|---|
| 50 | rep("pre3b");   //            |  8 | 
|---|
| 51 | rep("pre4a");   // 123456789  |  1234567 | 
|---|
| 52 | rep("pre4b");   //            |  89 | 
|---|
| 53 |  | 
|---|
| 54 | scanf("\n");  // next test does not start with %s so does not tolerate leading whitespace | 
|---|
| 55 | } | 
|---|
| 56 | { | 
|---|
| 57 | char s[] = "yyyyyyyyyyyyyyyyyyyy"; | 
|---|
| 58 | const char sk_fmt[] = "%*[abc]"; | 
|---|
| 59 | scanf( "abc " ); scanf( sk_fmt ); for ( 5 ) scanf( "%*c" ); printf( "1 %s\n", s ); | 
|---|
| 60 | scanf( "%s", s );                                                               printf( "2 %s\n", s ); | 
|---|
| 61 | scanf( "%*s" );                                                                 printf( "3 %s\n", s ); | 
|---|
| 62 | scanf( "%8s", s );                                                              printf( "4 %s\n", s ); | 
|---|
| 63 | scanf( "%*8s" );                                                                printf( "5 %s\n", s ); | 
|---|
| 64 |  | 
|---|
| 65 | scanf( "%[abc]", s );                                                   printf( "6 %s\n", s ); | 
|---|
| 66 | scanf( "%[^abc]", s );                                                  printf( "7 %s\n", s ); | 
|---|
| 67 | scanf( "%*[abc]" );                                                             printf( "8 %s\n", s ); | 
|---|
| 68 | scanf( "%*[^abc]" );                                                    printf( "9 %s\n", s ); | 
|---|
| 69 | scanf( "%8[abc]", s );                                                  printf( "10 %s\n", s ); | 
|---|
| 70 | scanf( "%8[^abc]", s );                                                 printf( "11 %s\n", s ); | 
|---|
| 71 | scanf( "%*8[abc]" );                                                    printf( "12 %s\n", s ); | 
|---|
| 72 | scanf( "%*8[^abc]" );                                                   printf( "13 %s\n", s ); | 
|---|
| 73 |  | 
|---|
| 74 | int rc; | 
|---|
| 75 | s[0] = 'q'; s[1] = '\0'; rc = 99; | 
|---|
| 76 | rc = scanf( "%[abc]", s );                                              printf( "14 rc=%d, %s\n", rc, s ); | 
|---|
| 77 | s[0] = 'q'; s[1] = '\0'; rc = 99; | 
|---|
| 78 | rc = scanf( "%[^u]", s );                                               printf( "15 rc=%d, %s\n", rc, s ); | 
|---|
| 79 | scanf( "%*[u]" ); | 
|---|
| 80 | scanf("\n"); | 
|---|
| 81 | } | 
|---|
| 82 | { | 
|---|
| 83 | char s[] = "yyyyyyyyyyyyyyyyyyyy"; | 
|---|
| 84 | char sk[] = "abc"; | 
|---|
| 85 | sin | "abc " | skip( sk ) | skip( 5 );                  sout | "1" | s; | 
|---|
| 86 | sin | wdi( sizeof(s), s );                                              sout | "2" | s; | 
|---|
| 87 | sin | ignore( s );                                                              sout | "3" | s; | 
|---|
| 88 | sin | wdi( sizeof(s), 8, s );                                   sout | "4" | s; | 
|---|
| 89 | sin | ignore( wdi( sizeof(s), 8, s ) );                 sout | "5" | s; | 
|---|
| 90 |  | 
|---|
| 91 | sin | incl( "abc", wdi( sizeof(s), s ) );               sout | "6" | s; | 
|---|
| 92 | sin | excl( "abc", wdi( sizeof(s), s ) );               sout | "7" | s; | 
|---|
| 93 | sin | ignore( incl( "abc", wdi( sizeof(s), s ) ) ); sout | "8" | s; | 
|---|
| 94 | sin | ignore( excl( "abc", wdi( sizeof(s), s ) ) ); sout | "9" | s; | 
|---|
| 95 | sin | incl( "abc", wdi( sizeof(s), 8, s ) );    sout | "10" | s; | 
|---|
| 96 | sin | excl( "abc", wdi( sizeof(s), 8, s ) );    sout | "11" | s; | 
|---|
| 97 | sin | ignore( incl( "abc", wdi( sizeof(s), 8, s ) ) ); sout | "12" | s; | 
|---|
| 98 | sin | ignore( excl( "abc", wdi( sizeof(s), 8, s ) ) ); sout | "13" | s; | 
|---|
| 99 |  | 
|---|
| 100 | s[0] = 'q'; s[1] = '\0'; | 
|---|
| 101 | sin | incl( "abc", wdi( sizeof(s), s ) );               sout | "14" | s; | 
|---|
| 102 | s[0] = 'q'; s[1] = '\0'; | 
|---|
| 103 | sin | excl( "u", wdi( sizeof(s), s ) );                 sout | "15" | s; | 
|---|
| 104 | sin | skip( "u" ); | 
|---|
| 105 | sin | "\n"; | 
|---|
| 106 | } | 
|---|
| 107 | /* Keep harmonized with collections/string-istream-manip */ | 
|---|
| 108 | { | 
|---|
| 109 | char c; | 
|---|
| 110 | sin | c;                                                                                sout | c; | 
|---|
| 111 | sin | ignore( c );                                                              sout | c; | 
|---|
| 112 |  | 
|---|
| 113 | signed char sc; | 
|---|
| 114 | sin | sc;                                                                               sout | sc; | 
|---|
| 115 | sin | wdi( 3, sc );                                                             sout | sc; | 
|---|
| 116 | sin | ignore( sc );                                                             sout | sc; | 
|---|
| 117 | sin | ignore( wdi( 3, sc ) );                                   sout | sc; | 
|---|
| 118 |  | 
|---|
| 119 | unsigned char usc; | 
|---|
| 120 | sin | usc;                                                                              sout | usc; | 
|---|
| 121 | sin | wdi( 3, usc );                                                    sout | usc; | 
|---|
| 122 | sin | ignore( usc );                                                    sout | usc; | 
|---|
| 123 | sin | ignore( wdi( 3, usc ) );                                  sout | usc; | 
|---|
| 124 |  | 
|---|
| 125 | signed short int ssi; | 
|---|
| 126 | sin | ssi;                                                                              sout | ssi; | 
|---|
| 127 | sin | wdi( 3, ssi );                                                    sout | ssi; | 
|---|
| 128 | sin | ignore( ssi );                                                    sout | ssi; | 
|---|
| 129 | sin | ignore( wdi( 3, ssi ) );                                  sout | ssi; | 
|---|
| 130 |  | 
|---|
| 131 | unsigned short int usi; | 
|---|
| 132 | sin | usi;                                                                              sout | usi; | 
|---|
| 133 | sin | wdi( 3, usi );                                                    sout | usi; | 
|---|
| 134 | sin | ignore( usi );                                                    sout | usi; | 
|---|
| 135 | sin | ignore( wdi( 3, usi ) );                                  sout | usi; | 
|---|
| 136 |  | 
|---|
| 137 | signed int si; | 
|---|
| 138 | sin | si;                                                                               sout | si; | 
|---|
| 139 | sin | wdi( 3, si );                                                             sout | si; | 
|---|
| 140 | sin | ignore( si );                                                             sout | si; | 
|---|
| 141 | sin | ignore( wdi( 3, si ) );                                   sout | si; | 
|---|
| 142 |  | 
|---|
| 143 | unsigned int ui; | 
|---|
| 144 | sin | ui;                                                                               sout | ui; | 
|---|
| 145 | sin | wdi( 3, ui );                                                             sout | ui; | 
|---|
| 146 | sin | ignore( ui );                                                             sout | ui; | 
|---|
| 147 | sin | ignore( wdi( 3, ui ) );                                   sout | ui; | 
|---|
| 148 |  | 
|---|
| 149 | signed long int sli; | 
|---|
| 150 | sin | sli;                                                                              sout | sli; | 
|---|
| 151 | sin | wdi( 3, sli );                                                    sout | sli; | 
|---|
| 152 | sin | ignore( sli );                                                    sout | sli; | 
|---|
| 153 | sin | ignore( wdi( 3, sli ) );                                  sout | sli; | 
|---|
| 154 |  | 
|---|
| 155 | unsigned long int uli; | 
|---|
| 156 | sin | uli;                                                                              sout | uli; | 
|---|
| 157 | sin | wdi( 3, uli );                                                    sout | uli; | 
|---|
| 158 | sin | ignore( uli );                                                    sout | uli; | 
|---|
| 159 | sin | ignore( wdi( 3, uli ) );                                  sout | uli; | 
|---|
| 160 |  | 
|---|
| 161 | signed long long int slli; | 
|---|
| 162 | sin | slli;                                                                             sout | slli; | 
|---|
| 163 | sin | wdi( 3, slli );                                                   sout | slli; | 
|---|
| 164 | sin | ignore( slli );                                                   sout | slli; | 
|---|
| 165 | sin | ignore( wdi( 3, slli ) );                                 sout | slli; | 
|---|
| 166 |  | 
|---|
| 167 | unsigned long long int ulli; | 
|---|
| 168 | sin | ulli;                                                                             sout | ulli; | 
|---|
| 169 | sin | wdi( 3, ulli );                                                   sout | ulli; | 
|---|
| 170 | sin | ignore( ulli );                                                   sout | ulli; | 
|---|
| 171 | sin | ignore( wdi( 3, ulli ) );                                 sout | ulli; | 
|---|
| 172 |  | 
|---|
| 173 | float f; | 
|---|
| 174 | sin | f;                                                                                sout | f; | 
|---|
| 175 | sin | wdi( 8, f );                                                              sout | f; | 
|---|
| 176 | sin | ignore( f );                                                              sout | f; | 
|---|
| 177 | sin | ignore( wdi( 8, f ) );                                    sout | f; | 
|---|
| 178 |  | 
|---|
| 179 | double d; | 
|---|
| 180 | sin | d;                                                                                sout | d; | 
|---|
| 181 | sin | wdi( 8, d );                                                              sout | d; | 
|---|
| 182 | sin | ignore( d );                                                              sout | d; | 
|---|
| 183 | sin | ignore( wdi( 8, d ) );                                    sout | d; | 
|---|
| 184 |  | 
|---|
| 185 | long double ld; | 
|---|
| 186 | sin | ld;                                                                               sout | ld; | 
|---|
| 187 | sin | wdi( 8, ld );                                                             sout | ld; | 
|---|
| 188 | sin | ignore( ld );                                                             sout | ld; | 
|---|
| 189 | sin | ignore( wdi( 8, ld ) );                                   sout | ld; | 
|---|
| 190 |  | 
|---|
| 191 | float _Complex fc; | 
|---|
| 192 | sin | fc;                                                                               sout | fc; | 
|---|
| 193 | sin | wdi( 8, fc );                                                             sout | fc; | 
|---|
| 194 | sin | ignore( fc );                                                             sout | fc; | 
|---|
| 195 | sin | ignore( wdi( 8, fc ) );                                   sout | fc; | 
|---|
| 196 |  | 
|---|
| 197 | double _Complex dc; | 
|---|
| 198 | sin | dc;                                                                               sout | dc; | 
|---|
| 199 | sin | wdi( 8, dc );                                                             sout | dc; | 
|---|
| 200 | sin | ignore( dc );                                                             sout | dc; | 
|---|
| 201 | sin | ignore( wdi( 8, dc ) );                                   sout | dc; | 
|---|
| 202 |  | 
|---|
| 203 | long double _Complex ldc; | 
|---|
| 204 | sin | ldc;                                                                              sout | ldc; | 
|---|
| 205 | sin | wdi( 8, ldc );                                                    sout | ldc; | 
|---|
| 206 | sin | ignore( ldc );                                                    sout | ldc; | 
|---|
| 207 | sin | ignore( wdi( 8, ldc ) );                                  sout | ldc; | 
|---|
| 208 | } | 
|---|
| 209 | #if defined( __SIZEOF_INT128__ ) | 
|---|
| 210 | { | 
|---|
| 211 | int128 val; | 
|---|
| 212 | for ( 15 ) { | 
|---|
| 213 | sin | val; | 
|---|
| 214 | sout | val; | 
|---|
| 215 | } | 
|---|
| 216 | } | 
|---|
| 217 | #endif // __SIZEOF_INT128__ | 
|---|
| 218 | } // main | 
|---|
| 219 |  | 
|---|
| 220 | // Local Variables: // | 
|---|
| 221 | // tab-width: 4 // | 
|---|
| 222 | // compile-command: "cfa -Wall -Wextra manipulatorsInput.cfa" // | 
|---|
| 223 | // End: // | 
|---|